擅长:python、mysql、java
<p>如果可以证明(根据语言实现在运行时所掌握的知识),对象的内存不可能再被访问,并且垃圾回收器认为它适合进行收集,那么该对象的内存将被释放。这是绝对最小值,你不应该再假设了。你通常不应该再担心什么了。在</p>
<p>更实际地说,它可以在最后一次引用之间的某个<em>时间点释放(其中“reference”不限于作用域中的名称,但可以是任何使对象<a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Reachability_of_an_object" rel="noreferrer">reachable</a>)被删除和内存耗尽的时间点。它不必由运行代码的Python实现释放,它也可以将内存清理留给操作系统,而不必考虑任何终结器等。请注意,在最后一次引用终止和内存使用实际下降之间可能会有明显的延迟。但如前所述,如果有垃圾要收集,大多数实现都会尽力避免过度的内存使用。在</p>
<p>更实际的情况是,您可能会在CPython(引用实现)上运行它,CPython总是使用引用计数(用一个真正的GC来处理循环引用),所以除非有循环引用(相对较少,而且您的代码看起来没有它们,但是可以发生,例如它将在最后一个对它的引用被删除/覆盖时被释放。当然,其他实现并不是那么可预测的—PyPy本身就有六个不同的垃圾收集器,除了一个属于上述段落的垃圾收集器之外。在</p>