==并且在python中

时间:2013-01-03 18:14:27

标签: python

自从我开始学习python以来已经过了几天,此时我偶然发现了==is。来自java背景,我假设==按对象ID和is按值进行比较,但是执行

 >>> a = (1,2)
 >>> b = (1,2)
 >>> a is b
 False
 >>> a == b
 True

似乎is等同于java的==,而python的==等同于java的equals()。这是考虑is==之间区别的正确方法吗?或者有一个警告?

3 个答案:

答案 0 :(得分:22)

答案 1 :(得分:16)

is检查两个操作数是否是同一个对象。 ==在左操作数上调用__eq__(),向右传递。通常这个方法实现了相等比较,但是可能编写一个将其用于其他目的的类(但它永远不应该)。

请注意,is==会在某些实现上为某些对象(字符串文字,-1到256之间的整数)提供相同的结果,但这并不意味着运算符应该是在这些情况下被认为是可替代的。

答案 2 :(得分:1)

之间的区别 == 最初也让我困惑,因为它们似乎对字符串都有相同的影响。对于任何可变对象(其中 对检测:别名很有用的东西之一),尝试与进行比较时,这种相似性会消失。复制可变对象是查看此内容的最简单方法。我将演示以及检测下面的别名的有用性:

>>> a=[1,2,3]
>>> b=a[:]
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> a==b
True
>>> a is b
False
>>> c=a
>>> a==c
True
>>> a is c
True
>>> 

(直接取自我的IDLE外壳)
请注意, == 实质上是比较值,而比较对象的标识(对象的内存位置,可以使用id(some_object)检索)。这可能有点令人困惑,但如果您了解数据在python中的存储方式,那么理解它就会变得容易一些。