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

Python中整数对象内存地址差异的原因探究

为什么两段Python代码的内存地址输出不同?

这事儿的核心原因是CPython的小整数缓存(Small Integer Caching)机制,说白了就是Python为了省内存、提速度搞的实用小优化。

咱们一步步拆解:

代码1的情况:p=89和x=89指向同一个对象

CPython在启动时,会预先创建好**-5到256**这个范围内的所有整数对象,把它们存在缓存里。当你给变量赋值这个范围内的整数时,Python不会新创建对象,而是直接把变量绑定到缓存里已有的那个对象上。

所以代码1里的p和x都绑定到了缓存里的89对象,它们的__repr__方法所属的对象自然是同一个,内存地址也就完全一致了。你运行这段代码:

p=89
x=89
print(p.__repr__,x.__repr__)

输出的两个内存地址相同,就是这个道理。

代码2的情况:p=898和x=898指向不同对象

898超出了-5到256的缓存范围,这时候Python没法用预先缓存的对象了,只能每次赋值都新创建一个整数对象。所以p绑定的是一个新的898对象,x绑定的是另一个全新的898对象,两个对象的内存地址自然不一样。

运行这段代码:

p=898
x=898
print(p.__repr__,x.__repr__)

就会看到两个不同的内存地址输出。

额外补充

  • 这个缓存机制是CPython的实现细节,其他Python解释器(比如PyPy)可能有不同的缓存策略,甚至缓存更大的范围,但-5到256的缓存是CPython的标准操作。
  • 你也可以用is运算符来验证两个变量是否指向同一个对象:比如p is x在代码1里会返回True,代码2里返回False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:12:06