我必须加载这个巨大的对象 A
(可以称重 almsot 10go),我需要将其传递给一个函数,该函数从中提取参数 B
以进一步对其进行一些繁重的计算。
A = load(file)
def function(A):
B = transorm(A)
B = compute(B)
return(B)
为了释放一些内存(因为我已经有一个 MemoryError),我想在 A
转换为 B 之后立即从内存中删除它。
我尝试了 del
但它似乎并不影响 A
在脚本级别的存在。我也试过 del global()["A"]
但它说 A 没有定义为全局变量。
有办法吗?谢谢!
最佳答案
del A
将简单地从 function
的局部作用域中删除 A
(参见 this answer)。 A
仍将保留在全局范围内。要将其从全局范围中删除,您可以使用闭包(并声明 global A
)或使用 python3
,您还可以使用关键字 nonlocal
.但是,这只会从范围中删除绑定(bind),并不能保证释放相应的内存。当对象被垃圾收集 时会发生这种情况。您可以通过 gc
模块强制进行垃圾收集(参见 this answer )。
但是,如果您遇到内存问题,而不是加载整个数据集,您可以使用数据集的 View ,并且一次只处理(加载)它的一部分(即流式处理数据).
关于Python - 从函数内部删除(从内存中删除)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41461169/