is 和 == 都是用于比较对象,但比较的是对象的不同属性。对象包括 id(对象的地址),type(对象的类型)和value(对象的值) 三个属性,is用于比较对象的id,==用于比较对象的value。
例子:
a=2
b=a
c=2
d=2.0
id(a) = 1745072384L
id(b) = 1745072384L
id(c) = 1745072384L
id(d) = 2313208599056L
①a,b,c三个变量的地址,用is判断时,实际比较的是id(a) == id(b) == id(c)。
用==判断时,比较的是 a == b == c。
②为什么a=2,b=a,c=2的地址是一样的?因为python在为数字分配内存时,只为数字内容分配内存,a=2,b=a,c=2,python只对数字5分配一块存储空间,而不是a,b,c各一块存储空间。
③is的维度比==广,两个变量的id一致,说明两个变量的所有属性一致,但是两个变量的值一致并不能代表两个变量的其他属性就一致。因此,is的使用范围比==广。
参考文章: