我必须加载这个巨大的对象 A
(可以称重 almsot 10go)我需要传递给一个函数,从中提取一个参数 B
进一步进行一些繁重的计算它。
A = load(file)
def function(A):
B = transorm(A)
B = compute(B)
return(B)
为了释放一些内存(因为我已经有一个 MemoryError),我想在它转换为 B 后立即从内存中删除 A
。我试过 del
但它没有似乎在脚本级别影响 A
的存在。我也试过 del global()["A"]
但它说 A 没有定义为全局变量。
有办法吗?谢谢!
原文由 Dominique Makowski 发布,翻译遵循 CC BY-SA 4.0 许可协议
del A
只会从A
的本地范围中删除 ---function
(请参阅 此答案)。A
仍然会在全球范围内持续存在。要将其从全局范围中删除,您可以使用闭包(并声明global A
)或使用python3
您还可以使用关键字nonlocal
但是,这只会从范围中删除绑定,并不能保证释放相应的内存。当对象被 垃圾回收 时会发生这种情况。您可以通过gc
模块强制进行垃圾回收(请参阅 此答案)。但是,如果您遇到内存问题,而不是加载整个数据集,您可以对数据集使用视图并且一次只处理(加载)它的一部分(即流处理数据)。