is与==区别
is用来判断两个变量引用对象是否相同;==用来判断两个变量的值是否相同。
- a is b相当于判断id(a) == id(b),id()函数是python中用来对某个变量做标识的函数,相当于能得到某个变量的内存地址。
- 对于可变对象,应注意其内存地址是否相同;
- 对于不可变对象,应注意python分配的整形池。
下面就可以来些实例,了解一下。
可变对象
a = []
b = []
print(a == b) # True
print(a is b) # False
可见两个列表值相同,但其内存地址不同
# a与b地址一致
a = []
b = a
print(a == b) # True
print(a is b) # True
# 浅拷贝,a与b地址不同
a = []
b = a[:]
print(a == b) # True
print(a is b) # False
# 深拷贝,a与b地址也不同
a = []
import copy
b = copy.deepcopy(a)
print(a == b) # True
print(a is b) # False
不可变对象
不可变对象包括字符串、数字等
python中会开辟一块内存空间,当在代码中定义某个变量时,不会重新分配内存空间。例如整数类型池,范围在[-5, 256],定义在此范围内的整数,不会重新分配内存,而都指向该池中的地址,因而is和==都成立。
a=-6;
b=-6;
print(a == b) # True
print(a is b) # False
a=-5;
b=-5;
print(a == b) # True
print(a is b) # True
a=256;
b=256;
print(a == b) # True
print(a is b) # True
a=257;
b=257;
print(a == b) # True
print(a is b) # False