id
仅定义为当前存在的元素中该元素独有的数字。一些 Python 实现(事实上,除了 CPython 之外的所有主要实现)不返回内存地址。
%~> pypy
Python 2.7.3 (480845e6b1dd219d0944e30f62b01da378437c6c, Aug 08 2013, 17:02:19)
[PyPy 2.1.0 with GCC 4.8.1 20130725 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``arguably, everything is a niche''
>>>> a = 1
>>>> b = 2
>>>> c = 3
>>>> id(a)
9L
>>>> id(b)
17L
>>>> id(c)
25L
所以你必须保证它是内存地址。此外,因此 Python 不提供id → object
映射,尤其是当id
删除原始对象时,映射到的对象可以更改。
你必须问为什么你持有id
. 如果是出于空间原因,请记住容器实际上包含对项目的引用,因此[a, a, a, a, a]
实际上占用的空间比[id(a), id(a), id(a), id(a), id(a)]; a
.
您还可以考虑为所有相关项目制作一个dict
并{id: val}
存储它。这将保持val
活动状态,因此您可以使用weakref
s 允许对val
s 进行垃圾收集。记住,如果weakref
你想要一个weakref
.