8

如果为变量分配了任何新内容,那么为“旧内容”分配的内存是否会“正确”释放?例如,在下面的脚本中,变量“a”作为零数组的内存是否会在“a”被分配一些新的东西之后被释放?

import numpy
a = numpy.zeros(1000)
a = a+1

我会想象 Python 足够聪明,可以使用所谓的“垃圾收集”来干净利落地做所有事情,但我永远无法真正阅读。有什么确认吗?我会很感激的。

4

2 回答 2

9

最终,旧内存将被释放,尽管您无法预测何时会发生。它取决于 Python 实现和许多其他因素。

也就是说,对于您提供的示例和 CPython 实现,应在分配期间对旧数组进行垃圾收集。

(请注意,NumPy 数组是讨论垃圾收集器行为的一个特别复杂的示例。)

于 2012-04-04T21:24:52.877 回答
2

您可以通过玩 gc 模块(可能还有微调)来找到答案。它提供了禁用收集器、调整收集频率和设置调试选项的能力。它还提供对收集器发现但无法释放的无法访问对象的访问。请参阅http://docs.python.org/library/gc.html

于 2012-04-04T21:36:04.267 回答