可能重复:
Python ‘==’ vs ‘is’ comparing strings, ‘is’ fails sometimes, why?
时
a == b
与
相同a is b
如果没有,有什么区别?
编辑: 为什么
a = 1
a is 1
返回True,但
a = 100.5
a is 100.5
返回False?
答案 0 :(得分:12)
不,这些不一样。 is
是对象标识的检查 - 即检查a
和b
是否完全相同。例如:
a = 100.5
a is 100.5 # => False
a == 100.5 # => True
a = [1,2,3]
b = [1,2,3]
a == b # => True
a is b # => False
a = b
a == b # => True
a is b # => True, because if we change a, b changes too.
所以:使用==
如果你的意思是对象代表相同的东西(最常见的用法),is
如果你的意思是对象应该在相同的内存中(你知道是否你需要后者。
此外,您可以通过==
运算符重载__eq__
,但不能重载is
。
答案 1 :(得分:5)
正如上面已经非常清楚地解释的那样。
:用于身份测试(相同的'对象')
== :用于等式测试(~~相同的值)
另请注意,Python使用字符串实习(作为优化),因此您可以获得以下奇怪的副作用:
>>> a = "test"
>>> b = "test"
>>> a is b
True
>>> "test_string" is "test" + "_" + "string"
True
>>> a = 5; b = 6; c = 5; d = a
>>> d is a
True # --> expected
>>> b is a
False # --> expected
>>> c is a
True # --> unexpected