Python中,如a is b,实际上是在比较ab是不是同一个对象,其实就是ab是不是同一个内存地址。

所以a is ba == b基本上是没有联系的。


但这里还有需要注意的:

一、简单变量若值相同,则可能内存地址相同

a = 1
b = 1
print(id(a), id(b))

结果为:

1540339376 1540339376

可以看到ab两个变量实际上是指向同一个内存块的,就像C++中的:

&b = a

但当a或b的值改变后,就是两个完全独立的变量了

a = 1
b = 1
print(id(a), id(b))
b = 2
print(id(a), id(b))

结果为:

1540339376 1540339376
1540339376 1540339408

二、复杂变量即使值相同,内存地址也不同

d = {'a': 1}
e = {'a': 1}
print(id(d), id(e))

结果为:

45479432 45504520

三、所有值为None的变量必指向同一内存块

f = None
g = 1
print(id(f), id(g))
g = None
print(id(f), id(g))

结果为:

1540090624 1540339376
1540090624 1540090624

所以,想要判断两个变量值是否相等,最好使用

a == b

而判断变量是否为None,则最好使用

a is None

而避免使用

a == None