gpt4 book ai didi

python - 变量赋值存储在内存中的什么位置?

转载 作者:行者123 更新时间:2023-11-30 21:58:11 24 4
gpt4 key购买 nike

y=5
id(5)
id(y)

在cpython中,两个id命令将返回相同的内存地址,其中存储了整数5,但是y 等于 5的信息存储在内存中的哪里?

为什么知道 5 存储在内存中的位置很重要,但知道 y 等于 5 存储在内存中的位置并不重要?

另外,使用python时是否可以将数字5存储在内存中的多个位置?为什么或者为什么不?

最佳答案

id(y)id(5)说在哪里5有问题的存储位置,而不是 y 的位置本身(名称)被存储。

y的位置本身(保存指向代表 5 的对象的指针的名称)是一个实现细节;在 CPython 中,函数本地名称存储在调用函数时创建的数组中,并在函数完成时清理,而全局名称存储在每个模块 dict 中。 (显示为 globals() )。 __code__函数的属性包含有关局部变量的信息,但不提供对数组的直接访问(因为这将允许 Python 代码破坏解释器不变量,或者依赖于甚至在微版本之间也可能发生变化的实现细节)。

知道在哪里5这并不重要。 id函数并非旨在提供实际位置,这只是分配 CPython 使用的唯一 ID 的便捷方法。在像 PyPy 这样的非 CPython 解释器中,它实际上根本不需要描述内存地址(它们以其他方式分配唯一的 ID,因为垃圾收集意味着内存地址在对象的生命周期中不稳定)。 id的要点与身份有关;这两个东西是相同对象吗(也可以使用 is 运算符进行测试),而不仅仅是值相等。

对于你的问题“使用Python时是否可以将数字5存储在内存中的多个位置?”,CPython的答案是“否”,但语言规范没有做出这样的保证。 id(y)id(5)相同只是因为实现细节,小 int缓存。在 CPython 上,int来自 -5256 (含)是单例;无论你如何获得它们(数学、解析字符串、文字等),每种都只有一个。但对于int超出该范围,它们是根据需要创建的,因此 id大多数情况下 s 不会重叠:

>>> y = 500
>>> id(y)
2538476592176
>>> id(500)
2538471826288

关于python - 变量赋值存储在内存中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com