微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么python中两个不同变量的地址相差320?

如何解决为什么python中两个不同变量的地址相差320?

enter image description here

我在 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

您实际上将小整数缓存中 1020 的内存位置分别分配给变量 xy。这就是为什么您会看到它们之间存在 320 字节 (32 * 10) 的差异。

请注意,此行为仅适用于 CPython。其他 Python 解释器可能没有小的整数缓存,或者它们可能以不同的方式实现 id() 函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。