Python通过循环删除局部变量

时间:2016-06-14 16:06:07

标签: python

我在函数中间编写了以下代码来删除除少数之外的所有变量。

dontDelete = ['Cat','Dog']
for vi in dir(): #'Cat','Dog','Pig','Elephant','Lion'
    if vi in dontDelete:
        continue
    else:
        del locals()[vi]

但它并没有删除任何变量,即使它转到del locals()[vi]语句

Edit1:我在函数中间耗尽了内存。所以,我想在函数中删除我在本地拥有的100个变量。我上面写的片段只是为了表明我正在寻找的东西。

Edit2:有人可以解释为什么对这个问题投反对票。是否有一个我不知道的明显解决方案。

Edit3:我无法在我正在做的事情中创建另一个功能。所以,我想尝试删除变量选项

1 个答案:

答案 0 :(得分:1)

locals() is a view on the locals, mutating it is not recommended and provides no guarantees as to whether the "real" values are changed or not.,根据文档中的说明:

  

注意:不应修改此词典的内容;更改可能不会影响解释器使用的本地和自由变量的值。

正确的解决方案通常是重构您的函数,因此您要删除的所有内容都是单独函数中的局部变量,并且您希望保留的内容由该函数返回。当子函数返回时,Python将为您清理本地,因此只保留返回值;如果在本地范围内存在必须立即释放的引用循环,则可以在函数返回后显式调用gc.collect()以强制进行完整循环收集,但这通常不是必需的。