2017-04-14 26 views
0

我有一個對象列表,我想通過每個對象並更改屬性。 (1)map lambda和(2)逐一瀏覽列表對象之間的內存使用情況有差異。Python Map Lamba內存

下面是一個簡單的例子代碼

class F(object): 
    def __init__(self): 
     self.ID = 0 

    def set_ID(self): 
     self.ID = 1 

number = 1000000 
list_objects = [F() for i in xrange(n)] 

有使用set_ID的方法有兩種:

一種方式

map(lambda x: x.set_ID(), list_objects) 

另一種方式

for obj in list_objects: 
    obj.set_ID() 
+0

yes obj = list_objects [i] – user58925

回答

1

我認爲,第二種方式是更好的,map用於功能應用到iterable的每一個項目,並返回結果的列表,以便:

map(lambda x: x.set_ID(), list_objects) 

實際上會產生100萬None列表,因爲你沒有不將它分配給一個變量,它會立即丟棄並被垃圾回收,因爲這個列表中的所有項目都是None,它不會吃太多的內存。由於您的lambdaside effect,您的物品在list_objects中的狀態發生了變化,我不認爲這是使用map的適當方式。

第二個方法沒有在整個過程中創建額外的對象。順便說一句,它可能只是:

for obj in list_objects: 
    obj.set_ID()