我在函数中间编写了以下代码来删除除少数之外的所有变量。
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:我无法在我正在做的事情中创建另一个功能。所以,我想尝试删除变量选项
答案 0 :(得分:1)
注意:不应修改此词典的内容;更改可能不会影响解释器使用的本地和自由变量的值。
正确的解决方案通常是重构您的函数,因此您要删除的所有内容都是单独函数中的局部变量,并且您希望保留的内容由该函数返回。当子函数返回时,Python将为您清理本地,因此只保留返回值;如果在本地范围内存在必须立即释放的引用循环,则可以在函数返回后显式调用gc.collect()
以强制进行完整循环收集,但这通常不是必需的。