Python中值大于256的int变量为何仍共用同一个对象?
问题原因解析
- 我们常说的「大于256的int不会复用对象」,是CPython小整数池的特性:CPython默认仅对-5~256范围的整数做全局常驻缓存,这个范围外的整数不会全局共享对象,这个结论本身没有问题。
- 你写的测试代码中大于256的
a和b仍然满足a is b,是两个原因共同导致的:- 你的
a和b都是直接绑定到for循环迭代出来的同一个n对象,本质就是两个变量指向同一块内存,id自然完全相同。 - 就算你把代码改成同一代码块内分别赋值相同的整数字面量(比如在同一个函数里写
a = 300、b = 300),得到的a is b也会是True,这是CPython的代码块级常量优化机制:编译同一段代码块时,会对不可变类型的相同字面量复用同一个对象,减少重复创建的开销。
- 你的
你可以用以下代码验证原本的小整数池特性:
def generate_num(): return 300 # 两个相同值的整数来自不同代码块 a = 300 b = generate_num() print(a is b) # 输出为False也可以直接在Python交互式解释器里逐行输入
a = 300、b = 300,再执行print(a is b),同样会得到False的结果。
内容的提问来源于stack exchange,提问作者pwshehan
相关产品推荐
相关产品推荐

