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

Python的small number cache是规范定义的还是实现细节?

Python小整数缓存特性的属性说明

你观测到的-5~256范围的整数缓存属于CPython解释器的具体实现细节,并未被纳入Python官方的语言规范要求。

Python语言的官方规范仅定义了整数类型的行为逻辑,不会对整数对象的内存分配、复用策略做强制约束。不同的Python解释器实现(如PyPy、Jython、IronPython等)可以自行设计整数管理方案,不需要强制兼容这个小整数缓存机制。

CPython默认实现这个缓存,本质是性能优化手段:小整数在程序中使用频率极高,提前预创建该区间的整数实例全局复用,能够避免频繁创建、销毁小整数对象带来的性能开销,同时减少冗余内存占用。

补充两点注意:

  • 即使是CPython环境,这个缓存区间也不是固定值,自行编译CPython源码时可以通过修改对应配置参数调整缓存的上下限
  • 你用来验证的代码逻辑成立,核心原理就是被缓存的整数是同一个对象实例,内存地址(id()函数的返回值)完全一致

你使用的验证代码:

for i in range(-7, 258):
    if id(i) == id(i + 0):
        print(i, "is cached")
    else:
        print(i, "is not cached")

默认CPython环境下的输出结果:

-7 is not cached
-6 is not cached
-5 is cached
-4 is cached
[...]
255 is cached
256 is cached
257 is not cached

内容的提问来源于stack exchange,提问作者Thomas W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:21:01