免费列表上关于 GC 的 Python 文档:
由于特定的实现,尤其是 int 和 float,并非某些空闲列表中的所有项目都可能被释放。
因此,通过生成器分配一个无穷大的整数会吃掉你所有的内存(直到接收到内存错误),而并不是所有的项目都可以按照上面的定义被释放。
但那段记忆就这样消失了吗?不,环境会保留它以供您的代码重用。垃圾收集“高效”并不意味着它会在对象离开范围的那一刻进行回收。它也可能意味着“让我们继续使用刚刚使用的内存,也许这段愚蠢的代码会想要再次使用它。”
或者正如Effbot告诉我们的那样:
返回给给定分配器的内存将被该分配器重用,即使它没有返回给系统。
您可以 强制进行 GC 收集,但这实际上可能会影响性能,除非您知道原因并且有非常非常好的理由强制它。
gc.collect([generation])
With no arguments, run a full collection. The optional argument generation may be an integer specifying which generation to collect (from 0 to 2). A ValueError is raised if the generation number is invalid. The number of unreachable objects found is returned.
Changed in version 2.5: The optional generation argument was added.
Changed in version 2.6: The free lists maintained for a number of built-in types are cleared whenever a full collection or collection of the highest generation (2) is run. Not all items in some free lists may be freed due to the particular implementation, in particular int and float.