为何Python中id(a) is id(b)返回False?预期结果应为True
问题解释
先明确两个核心区别:
is运算符比较的是对象的内存身份,只有当两个变量指向同一个内存对象时才返回True;==运算符比较的是对象的值,只要值相等就返回True。
再看id()函数的特性:它返回的是代表对象内存地址的整数。Python对小整数(默认范围-5到256)有缓存机制,这些整数会被全局复用,所以对这个范围内的整数用is比较会返回True。但对于超出这个范围的大整数,Python每次都会创建新的整数对象——哪怕数值完全一样,它们也是内存里的不同对象。
回到你的测试代码:
a和b指向同一个字符串对象,所以a is b返回True,id(a)和id(b)的数值也完全相同;- 但
id(a)和id(b)返回的是远大于256的大整数(比如你结果里的1843108275696),这两个整数是Python临时生成的不同对象,所以用is比较时,因为内存地址不一样,返回False;而==只看数值是否相等,所以返回True; - 同理,
c和d分别存储了这两个大整数对象,所以c is d也是False,c == d是True。
内容的提问来源于stack exchange,提问作者tora
相关产品推荐
相关产品推荐

