擅长:python、mysql、java
<p>文档<a href="http://docs.python.org/library/functions.html#id" rel="nofollow">says it all</a>:</p>
<blockquote>
<p><code>id(object)</code>:</p>
<p>Return the “identity” of an object. This is an integer (or long
integer) which is guaranteed to be unique and constant for this object
during its lifetime. Two objects with non-overlapping lifetimes may
have the same id() value.</p>
</blockquote>
<p>无论何时调用构造函数,都会创建一个新对象。该对象的id与当前活动的任何其他对象的id都不同。在</p>
<pre><code>>>> n1 = N()
>>> n2 = N()
>>> id(n1) == id(n2)
False
</code></pre>
<p>两个对象的“内容”并不重要。它们是两个不同的实体;它们得到不同的ID似乎完全合乎逻辑。在</p>
<p>在CPython中,id只是内存地址。它们确实会被回收:如果一个对象被垃圾回收,那么在将来某个时候创建的另一个对象可能会获得相同的id。这就是您在重复的<code>id(N()), id(T())</code>测试中看到的行为:由于您没有保留对新创建对象的引用,解释器可以自由地对它们进行垃圾收集并重用它们的id。在</p>
<p>ids的回收显然是一个实现/平台的产物,不应该依赖它。在</p>