在Python使唯一对象列表

问题描述:

是可能的“填充” Python中的数组,像这样:在Python使唯一对象列表

> [0] * 10 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

我想用这个样本的原则,以快速建立类似的对象列表:

> a = [{'key': 'value'}] * 3 
> a 
[{'key': 'value'}, {'key': 'value'}, {'key': 'value'}] 

但现在看来,这些对象是环环相扣:

> a[0]['key'] = 'another value' 
> a 
[{'key': 'another value'}, {'key': 'another value'}, {'key': 'another value'}] 

由于Python没有一个clone()方法(这是我寻找的第一件事),我将如何创建独特的对象,而无需声明for循环并呼吁append()添加它们?

谢谢!

+2

FWIW,在''copy.copy()''函数可用于 “克隆” 多种现有Python对象。另外,一些可变对象(deques,set,dicts)有一个''copy()''方法。该列表对象在Python 3中增加了一个'copy()''方法。 –

+0

由于问题已关闭,因此我必须使用注释来回答问题的有趣部分,“如何在没有for - 循环和追加?“这是你可以做的:''d = {'key':'value'};导入副本;从itertools导入重复; a = list(map(copy.copy,repeat(d,10)))''。当有''copy()''方法可用时,使用* starmap *会更快:''a = list(starmap(d.copy,repeat((),10)))''。 –

一个简单的列表理解应该做的伎俩:

>>> a = [{'key': 'value'} for _ in range(3)] 
>>> a 
[{'key': 'value'}, {'key': 'value'}, {'key': 'value'}] 
>>> a[0]['key'] = 'poop' 
>>> a 
[{'key': 'poop'}, {'key': 'value'}, {'key': 'value'}]