2017-06-08 38 views
0

Python是否會進行任何分析以提前釋放內存?舉例來說,如果我有:何時數據被釋放?

d = some big array 
# ... use(d) ... 

# no d is used from here 
# a lot of other code, the code could use more big arrays 

什麼時候蟒蛇決定刪除由d使用的內存?

如果我在函數中使用d,函數完成後是否會釋放d

也許一般來說這很難,因爲d可以分配給其他人,並且在功能完成後他們可以繼續使用d

不過,我一直在尋找一些好的做法,可以讓蟒蛇使用較少的內存...

+1

當你不再使用'd'時,使用'del d'。 – nsilent22

+1

@ nsilent22它只是取消引用名稱'd',但實際上並不會從內存中刪除數組(除非它是唯一的引用)。 –

+1

與許多語言一樣,Python使用垃圾收集器。但垃圾收集的細節是實現定義的。我所知道的大多數使用引用計數的實現,就像@ nsilent22提到的那樣,使用'del'可以刪除對象的引用,使他們有資格成爲GC'd。 – 0x5453

回答

0

所有數據均以目標形式表示CTS。變量是對這些對象的引用(很像Java中的引用類型)。

一旦無法訪問該對象(即,指向該對象的引用的總數降爲0),對象將被垃圾收集。

要明確刪除對象的引用,請使用del指令。如果刪除對某個對象的唯一引用,則該對象將被垃圾收集。

一旦函數返回,所有局部變量都會被自動垃圾收集,你不需要自己做。

0

只要在函數中使用d時添加一點,就取決於聲明d的時間。如果在函數中聲明瞭d,並且沒有引用d的內部函數,它將被垃圾收集。

例如:

def outer(): 
    d = np.arange(10000) 
    def inner(): 
     d += 1 
     return d 
    return inner 
在這種情況下d將仍然駐留在存儲器如果返回 outer()功能後