如果为变量分配了任何新内容,为“旧内容”分配的内存是否会“正常”免费?例如,在下面的脚本中,在为“a”分配一些新东西之后,将变量“a”的内存作为零数组释放
import numpy
a = numpy.zeros(1000)
a = a+1
我想成像Python足够聪明,可以干净利落地使用所谓的“垃圾收集”,我从来没有真正能够通读。任何确认?我很感激。
答案 0 :(得分:8)
最终,旧内存将被释放,但您无法预测何时会发生这种情况。它取决于Python实现和许多其他因素。
那就是说,对于你给出的例子和CPython实现,在分配期间应该对旧数组进行垃圾收集。
(请注意,NumPy数组是讨论垃圾收集器行为的一个特别复杂的示例。)
答案 1 :(得分:1)
你可以通过玩gc模块找到答案(可能还有微调)。它提供了禁用收集器,调整收集频率和设置调试选项的功能。它还提供对收集器找到但无法释放的无法访问的对象的访问。 见http://docs.python.org/library/gc.html