2016-12-29 44 views
0

我有一個需要大約10分鐘才能在本地機器上運行的腳本。在腳本開始時,我必須構建一些相當大的列表,並遍歷它們以執行各種清理功能,從而創建新的清理數據列表。這樣做是否有標準的方法來清除/保留內存?在python中清除/保留內存

我最初的想法是簡單的變量重新設置空單,一旦我使用它做:

lst = [1,2,3, toinfinity..] 
clean_lst = [x for x in l if x < infinity] 
lst = [] 
cleaner_lst = [x for x in clean_lst if x > 100] 
clean_lst = [] 
# etc... 
+2

知道...一般蟒蛇垃圾收集只是工作 –

+1

您也可以使用'del'。 http://stackoverflow.com/questions/6146963/when-is-del-useful-in-python – NPE

+1

爲什麼你需要執行你自己的運行時內存管理?在Python中,與大多數語言一樣,一旦釋放內存,運行時系統就會將其返回到可用的堆中。在Python中發佈它只是沒有更多的數據對象引用。 – Prune

回答

1

如果沒有較大的代碼方面肯定知道,這是很難知道,如果這個答案是非常有用的,但假設土特產品不需要保留原來的列表:

lst = [1,2,3, toinfinity..] 
lst = [x for x in lst if x < infinity] 
lst = [x for x in lst if x > 100] 

一般來說,Pyth:

只需用乾淨的版本替換清單自身在處理垃圾收集相當好。在這種情況下,再次假設您不需要原始文件,創建瞬態列表只需使用內存即可,無需使用。

1

首先,如果我是你,我會通過封裝您在功能提到的那些電話,並呼籲

import cProfile 
cProfile.run("my_function()") 

後分析我的代碼,例如,我是把重點放在那些小優化,例如您請求在後(!而不是側重於真正的性能豬),我會替換代碼上面:

some_list = [x for x in range(infinity) if x > 100 and x < infinity] 
# replacing range with xrange in python2 

但這只是一個步驟之前,我想轉換的方括號進入正常的,轉換我的名單變成發電機。如果你可以更精確地滿足要求,也許我們可以做得更好。

例如,您提到您運行各種功能。爲什麼不喜歡的東西替代它:

def clean_some_data(data, cleanup_functions): 
    return [cleanup_function(data) for cleanup_function in cleanup_functions] 

# or 

def clean_some_data(data, cleanup_functions): 
    for cleanup_function in cleanup_function: 
     data = [cleanup_function(item) for item in data] 
    return data 

有一些可能性,但更多的細節將需要