在Python中,“a is b”和“id(a) == id(b)”之间有什么区别?
- 论坛
- 在Python中,“a is b”和“id(a) == id(b)”之间有什么区别?
27 浏览
在Python中,“a is b”和“id(a) == id(b)”之间有什么区别?
内置函数id()提供了一个整数(或长整数),在对象的生命周期内保证是唯一且恒定的。而is运算符则提供了对象的身份标识。那么为什么可能存在两个具有相同id的对象,但在is检查中返回False呢?下面是一个示例:
class Test():
def test():
pass
a = Test()
b = Test()
id(a.test) == id(b.test)的结果是True
a.test is b.test的结果是False
更令人困惑的例子:(继续上面的代码)
b = a
b is a的结果是True
b.test is a.test的结果是False
a.test is a.test的结果是False
然而:
new_improved_test_method = lambda: None
a.test = new_improved_test_method
a.test is a.test的结果是True