x is y
与有所不同x == y
。
x is y
当且仅当id(x) == id(y)
-即 x
且y
必须是一个相同的对象(具有id
s)时才为true 。
对于所有内置的Python对象(如字符串,列表,字典,函数等),如果x is y
,则x == y
也为True。但是,通常不能保证这一点。严格来说,x == y
当且仅当x.__eq__(y)
返回True时,才为true 。
例如,可以使用始终返回Falsex
的__eq__
方法来定义对象,并且x == y
即使也会导致返回False x is y
。
所以最重要的是,x is y
而且 x == y
完全是不同的测试。
考虑以下示例:
In [1]: 0 is False
Out[1]: False
In [2]: 0 == False
Out[2]: True
PS。代替
if x is y:
return True
else:
return False
写起来更Python化
return x is y
同样,
if x == y:
return True
else:
return False
可以替换为
return x == y