Python:比较符is使用时的注意点
Python中,如a is b
,实际上是在比较a
和b
是不是同一个对象,其实就是a
和b
是不是同一个内存地址。
所以a is b
和a == b
基本上是没有联系的。
但这里还有需要注意的:
一、简单变量若值相同,则可能内存地址相同
a = 1
b = 1
print(id(a), id(b))
结果为:
1540339376 1540339376
可以看到a
,b
两个变量实际上是指向同一个内存块的,就像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
可以从python的可变变量、不可变变量来解释。
是的~Python官方也称为mutable和immutable,不过这里为了尽量不引入专门的名词就故意隐去了~