Python - 从函数内部删除(从内存中删除)变量?

新手上路,请多包涵

我必须加载这个巨大的对象 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 许可协议

阅读 531
1 个回答

del A 只会从 A 的本地范围中删除 --- function (请参阅 此答案)。 A 仍然会在全球范围内持续存在。要将其从全局范围中删除,您可以使用闭包(并声明 global A )或使用 python3 您还可以使用关键字 nonlocal 但是,这只会从范围中删除绑定,并不能保证释放相应的内存。当对象被 垃圾回收 时会发生这种情况。您可以通过 gc 模块强制进行垃圾回收(请参阅 此答案)。

但是,如果您遇到内存问题,而不是加载整个数据集,您可以对数据集使用视图并且一次只处理(加载)它的一部分(即流处理数据)。

原文由 a_guest 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题