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

为何id(2)与id(1)差值为32?id返回位还是字节地址?

关于Python中id()返回地址的疑问
>>> a = 1
>>> b = 2
>>> id(a), id(b), id(b) - id(a)
(1814458401008, 1814458401040, 32)

核心疑问:id()返回的内存地址是以位还是字节为单位?

根据Python官方文档说明:

当前实现会为-5到256之间的所有整数维护一个整数对象数组,当创建该范围内的int时,实际返回的是现有对象的引用。

按照这个逻辑,如果整数以32位存储且-5到256的数字在内存中紧密排列,那么1和2的地址应该相差32位。但实际测试发现,整数对象的大小是28字节:

>>> import sys
>>> a = 1
>>> a.__sizeof__(), sys.getsizeof(a), sys.getsizeof(3)
(28, 28, 28)

这里就产生了新的疑问:如果id()返回的是字节地址,那1和2的地址差是32字节,减去对象本身的28字节,剩下的4字节空间是用来做什么的?

另外,对于超出-5到256范围的更大数字,它们的内存地址是随机分布的,这符合预期:

>>> a = 257
>>> b = 258
>>> id(a), id(b), id(b) - id(a)
(1814557834096, 1814557827568, -6528)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:31:14