【发布时间】:2014-08-27 15:35:03
【问题描述】:
我正在使用占用大量内存的非常大的 numpy/scipy 数组。假设我的代码如下所示:
def do_something(a):
a = a / a.sum() #new memory is allocated
#I don't need the original a now anylonger, how to delete it?
#do a lot more stuff
#a = super large numpy array
do_something(a)
print a #still the same as originally (as passed by value)
所以我正在调用一个带有巨大 numpy 数组的函数。然后该函数以某种方式处理数组,但原始对象仍保存在内存中。有没有办法释放函数内部的内存;删除引用不起作用。
【问题讨论】:
-
删除引用不起作用,因为调用者仍然持有对该对象的引用。他们可能需要它,所以你不能只在他们身上释放它。
-
将
return a添加到您的函数中,并将其称为a = do_something(a)。a最初指向的数组将没有任何指向它的引用,并将被垃圾回收。 -
是在函数中调用 del 后立即删除还是仅在返回后才删除?