Python中"is"和"=="有什么区别?
‘is’
a == b
和
a is b
是一样的吗?
如果不是,那有什么区别呢?
编辑:
为什么
a = 1
a is 1
返回True,而
a = 100.5
a is 100.5
返回False呢?
2 个回答
5
如上面已经非常清楚地解释过了。
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
13
不,这两个是不同的。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.
所以,如果你想比较两个对象是否代表同样的东西,就用 ==
(这是最常见的用法);如果你想确认这两个对象在内存中是完全相同的(你会知道什么时候需要这种比较)。
另外,你可以通过 __eq__
操作符来重载 ==
,但 is
是不能重载的。