python中“is”和“==”有什么区别?

时间:2009-10-27 23:40:48

标签: python operators

  

可能重复:
  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?

2 个答案:

答案 0 :(得分:12)

不,这些不一样。 is是对象标识的检查 - 即检查ab是否完全相同。例如:

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