擅长:python、mysql、java
<p>我认为具有循环引用的对象不能被<em>保证被收集的最重要原因是,根据设计,Python<em>从不</em>收集具有循环引用的对象,如果它们定义了</em><code>__del__</code><em>方法</em>。有一个漂亮的<a href="http://docs.python.org/library/gc.html#gc.garbage" rel="nofollow">straightforward reason</a>:</p>
<blockquote>
<p>Python doesn’t collect such cycles automatically because, in general, it isn’t possible for Python to guess a safe order in which to run the <code>__del__()</code> methods.</p>
</blockquote>
<p>我不愿意说,这是不可访问的循环引用对象可能无法检测到的唯一原因。可能有一些不寻常的情况会破坏GC的循环检测机制。但是,除非您为您的一个对象定义<code>__del__</code>,否则您很可能是<em>好的。不用担心,如果发现性能问题,可以使用GC的大量调试选项。在</p>