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

Python 3.11.1整数驻留范围疑问:超出-5至256为何仍生效?

Python 3.11.1中整数驻留的疑问

我之前通过搜索得知Python 3的整数驻留范围是-5至256,但测试该范围外的数值时,发现整数驻留似乎仍在生效。例如:

x = 258
y = 258

print("Address of x: ", id(x))
print("Address of y: ", id(y))
print(x is y)

运行结果为:

Address of x:  2380522692112
Address of y:  2380522692112
True

将x和y改为20000时,我得到了类似的结果。我原本预期x和y的内存地址不同,第三行输出为False,这和一篇旧帖子中的结果一致。

请问整数驻留的限制范围是否已变更?若已变更,新的范围是什么?我使用的是Python 3.11.1版本。

提前致谢!


解答

这并不是小整数池的范围发生了变更,而是Python编译器的常量折叠优化在起作用:

  • Python确实会预创建-5到256的整数对象(小整数池),这些对象在整个程序运行期间都会被复用,不受代码块限制。
  • 对于超出这个范围的整数,若在同一个代码块中出现相同的字面量,编译器会在编译阶段将它们合并为同一个对象,所以你会看到x和y的内存地址相同。
  • 但如果把赋值操作放在不同的代码块(比如不同函数、交互式环境中逐行输入),就不会触发这个优化,此时超出-5到256的整数会被创建为不同对象,x is y会返回False。

举个例子,在交互式环境中逐行输入:

x = 258
y = 258
x is y  # 这里会返回False

而如果把代码放在同一个脚本文件中执行,就会返回True,这就是常量折叠的差异。

内容的提问来源于stack exchange,提问作者VigoHolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:22:54