python 是否会在更高范围内垃圾收集永远不会再次使用的变量?

cha*_*ies 1 python memory garbage-collection scope python-3.x

例如,在代码中:

a = [1, 2, 3, 4] # huge list

y = sum(a)

print( do_stuff(y) )
Run Code Online (Sandbox Code Playgroud)

在程序结束之前列表的内存会a被释放吗?函数调用是否必须在不断占用内存的情况do_stuff下完成所有工作,即使s 永远不会再次使用?aa

如果a没有收集垃圾,是否可以a=None在使用完毕后手动设置解决方案?

Kel*_*ndy 5

想象一下do_stuff这样做:

def do_stuff(y):
    return globals()[input()]
Run Code Online (Sandbox Code Playgroud)

用户输入a,以便列表最终被使用。Python 无法知道这种情况不会发生,它必须读取用户的想法。

考虑这样一个简单的例子:

def do_stuff(y):
    return y
Run Code Online (Sandbox Code Playgroud)

现在很明显它a不再被使用,所以 Python可以解决这个问题,对吗?嗯...print不再是关键字/语句了。Python 必须弄清楚你没有print用确实使用a. 即使您不这样做,它也需要知道它自己的print不使用a.

您必须自己删除它。我会用del a. (除非你 a仍然存在并具有价值None)。