为何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
相关产品推荐
相关产品推荐

