在Python中,“a is b”和“id(a) == id(b)”之间有什么区别?

27 浏览
0 Comments

在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

0