我正在處理佔用大量內存的非常大的numpy/scipy陣列。假設我的代碼如下所示:如何刪除python函數中的對象?
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數組。然後該函數以某種方式處理數組,但原始對象仍保留在內存中。有什麼方法可以釋放函數內的內存嗎?刪除參考不起作用。
刪除引用不起作用,因爲主叫方仍持有該對象的引用。他們可能需要它,所以你不能僅僅在它們上面釋放它。 – kindall 2014-08-27 15:53:05
爲你的函數添加一個'return a',並將其稱爲'a = do_something(a)'。最初由'a'指向的數組不會有任何指向它的引用,並且將被垃圾收集。 – Jaime 2014-08-27 17:05:18
只要del函數在函數中被調用,或者僅在返回後才被刪除? – fsociety 2014-08-27 19:47:26