2017-04-14 51 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()