【发布时间】:2016-02-21 10:49:32
【问题描述】:
我能理解下面的定义:
每个对象都有一个标识、一个类型和一个值。对象的身份 一旦创建就永远不会改变;你可能会认为它是 对象在内存中的地址。
is运算符比较 两个物体;id()函数返回一个整数,表示其 身份。
我会假设上述定义在“某物”被创建时有效,例如:
>>> a = 0
>>> id(a)
1720438480
但我不明白:
>>> id(1)
1720438512
>>> b = 1
>>> id(b)
1720438512
我还没有创造任何东西;那么整数“1”怎么会有ID呢?这是否意味着我在 Python Shell 中“提到” 1 时,它就被分配到一个内存地址?另外,这是否意味着因为ID在其生命周期内永远不会改变,并且因为我的计算机内存有限,如果我反复询问独特事物的id(),我最终会得到类似“内存不足”的消息? (它不能重新分配内存,因为其他人的生命周期还没有结束。)
或者,从另一个角度展示我的耳朵:
>>> id(something_1)
some unique memory address
>>> id(something_2)
some unique memory address
>>> ...
在什么时候重新分配内存?也就是说,此时,
>>> my_variable = something_1
>>> id(my_variable)
会给出一个不同于id(something_1)的ID?
【问题讨论】:
-
请注意,对于小整数,
ids 将按照stackoverflow.com/questions/6934202/… 重复使用。
标签: python python-3.x memory-management identity