2017-04-14 10 views
0

私はオブジェクトのリストを持っていますが、私は各オブジェクトを調べて帰属させたいと思います。 (1)地図ラムダと(2)リストオブジェクトを1つずつ通過する間にメモリ使用量に違いがありますか?ここでPython Map Lamba Memory

は、簡単なサンプルコード

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を使用しての2つの方法があります。

一つの方法

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

別の方法

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

はいobj = list_objects [i] – user58925

答えて

1

は、私はmapがそのように、iterableの項目ごとに関数を適用し、結果のリストを返すために使用され、第二の方法が優れていると思う:あなたがしたので、

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

は、実際に、1000000 Noneのリストを生成します。これを変数に代入しないと、すぐに破棄され、ガベージコレクションされます。このリストのすべての項目はNoneなので、あまりメモリを食べません。 list_objectsのアイテムの状態は、のside effectのために変更されていますが、これはmapを使用する適切な方法ではないと私は考えています。

第2の第2の方法では、プロセス全体で余分なオブジェクトが作成されません。ちなみに、それはちょうど:

for obj in list_objects: 
    obj.set_ID()