为何Python中较大整数的a is b返回False?内存地址差异解析
为什么整数超过256后
a is b返回False? 核心原因:Python的整数缓存机制
Python为了优化性能,会预创建并缓存范围在-5到256之间的整数对象。这些对象在程序运行期间会被全局复用,所以任何指向这个范围内整数的变量,都会引用同一个内存地址的对象,因此a is b返回True。
对于超出-5~256范围的整数,默认不会被缓存。每次通过表达式(比如循环里的i*20)生成时,Python都会创建一个全新的整数对象。即使两个变量的值相同,它们引用的也是不同的内存对象,所以a is b返回False。
针对你的两个场景解释
循环中的两次独立赋值
你循环里的a = i*20和b = i*20是两次独立的表达式计算。当结果≤256时,复用缓存的整数对象,所以a和b指向同一个对象;当结果≥260时,两次计算各自生成新的对象,因此id(a) != id(b),a is b返回False。同一行赋值
a = b = 260
这种赋值方式下,Python会先创建一个260的整数对象,再将a和b同时指向这个对象。此时a和b引用的是同一个内存地址,所以a is b会返回True,和你预期一致。你可能混淆了这种同一行赋值和循环中两次独立赋值的场景。
补充说明
is比较的是对象的身份(内存地址),等价于id(a) == id(b);而==比较的是对象的值是否相等,所以即使a is b为False,a == b依然会是True。- 整数缓存的范围是Python的默认实现优化,通常不需要修改,除非有特殊需求。
内容的提问来源于stack exchange,提问作者sexy_pikachu
相关产品推荐
相关产品推荐

