You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中值大于256的int变量为何仍共用同一个对象?

问题原因解析
  • 我们常说的「大于256的int不会复用对象」,是CPython小整数池的特性:CPython默认仅对-5~256范围的整数做全局常驻缓存,这个范围外的整数不会全局共享对象,这个结论本身没有问题。
  • 你写的测试代码中大于256的a和b仍然满足a is b,是两个原因共同导致的:
    1. 你的a和b都是直接绑定到for循环迭代出来的同一个n对象,本质就是两个变量指向同一块内存,id自然完全相同。
    2. 就算你把代码改成同一代码块内分别赋值相同的整数字面量(比如在同一个函数里写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:15:03