Python:当为变量分配新内容时,是"旧的"内存是免费的吗?

Lia*_*ang 6 python garbage-collection memory-management

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

import numpy
a = numpy.zeros(1000)
a = a+1
Run Code Online (Sandbox Code Playgroud)

我想成像Python足够聪明,可以干净利落地使用所谓的"垃圾收集",我从来没有真正能够通读.任何确认?我很感激.

Sve*_*ach 8

最终,旧的内存将被释放,但你无法预测何时会发生这种情况.它取决于Python实现和许多其他因素.

也就是说,对于您给出的示例和CPython实现,旧的数组应该在赋值期间进行垃圾回收.

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