如何解决为什么python中两个不同变量的地址相差320?
我在 python 中为不同的变量初始化了不同的值
x = 10
y = 20
z = 30
当我使用 id(x)
,id(y)
,id(z)
查找 x,y,z 的相应地址时,我发现它们的所有地址都相差 320。
为什么它们相差 320 以及为什么它们的地址不连续。
解决方法
您正在看到名为 small integer cache 的 CPython 优化的结果。
CPython 将 -5 到 256(含)之间的整数存储在特殊缓存中,因为它们在用户程序中经常使用。这样解释器就不必每次使用数字时都初始化一个新对象:
>>> x = 10
>>> y = 10
>>> id(x) == id(y)
True
同时
>>> x = 1000
>>> y = 1000
>>> id(x) == id(y)
False
现在,假设小整数缓存在内存中如下所示:
[-5,-4,-3,...,10,... 20,256]
小整数在 Python 3 中通常占用 28 个字节,但可能因为有 4 个字节的开销,上面的每个数字正好占用 32 个字节:
>>> id(1) - id(0)
32
当你这样做
>>> x = 10
>>> y = 20
您实际上将小整数缓存中 10
和 20
的内存位置分别分配给变量 x
和 y
。这就是为什么您会看到它们之间存在 320 字节 (32 * 10) 的差异。
请注意,此行为仅适用于 CPython。其他 Python 解释器可能没有小的整数缓存,或者它们可能以不同的方式实现 id()
函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。