我有一个对象列表,我想浏览每个对象并更改一个属性。 (1)map lambda和(2)逐个浏览列表对象之间的内存使用是否存在差异?
这是一个简单的示例代码
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 :(得分:1)
我认为第二种方式更好,map
用于将函数应用于iterable
的每个项目并返回结果列表,因此:
map(lambda x: x.set_ID(), list_objects)
实际上会生成一个1000000 None
的列表,因为你没有将它分配给一个变量,它会被立即丢弃并被垃圾收集,因为这个列表中的所有项都是None
,它不会吃太多记忆。由于list_objects
的{{1}},side effect
中的商品状态发生了变化,我认为这不是lambda
的合适使用方式。< / p>
第二种方法在整个过程中没有创建任何额外的对象。顺便说一句,它可能只是:
map