是
a == b
Run Code Online (Sandbox Code Playgroud)
同样的
a is b
Run Code Online (Sandbox Code Playgroud)
?
如果没有,有什么区别?
编辑:为什么
a = 1
a is 1
Run Code Online (Sandbox Code Playgroud)
返回True,但是
a = 100.5
a is 100.5
Run Code Online (Sandbox Code Playgroud)
返回False?
Pet*_*ter 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.
Run Code Online (Sandbox Code Playgroud)
所以:==如果你的意思是对象应该表示相同的东西(最常见的用法),is如果你的意思是对象应该在相同的内存中(你知道你是否需要后者).
此外,您可以==通过__eq__操作员重载,但不能超载is.
正如上面已经非常清楚地解释的
是:用于身份测试(相同的'对象')
==:用于相等测试(~~相同的值)
还要记住,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
Run Code Online (Sandbox Code Playgroud)