内存中存储的变量赋值是什么?

问题描述 投票:1回答:1
y=5
id(5)
id(y)

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

为什么能够知道存储在存储器中的哪个位置是重要的,但知道存储器中的y等于5的位置并不重要?

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

python python-3.x memory memory-management
1个回答
3
投票

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-5(包括)的256s是单身人士;无论你如何得到它们(数学,解析字符串,文字等),每个都只有一个。但对于该范围之外的ints,它们是按需创建的,因此在大多数情况下ids不会重叠:

>>> y = 500
>>> id(y)
2538476592176
>>> id(500)
2538471826288
© www.soinside.com 2019 - 2024. All rights reserved.