2015-08-09 3 views
7

Es ist möglich, zu ‚füllen‘ ein Array in Python wie folgt:Machen Liste der Eindeutig Objekte in Python

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

ich diese Probe Prinzip verwenden wollte eine Liste ähnlicher Objekte schnell zu erstellen:

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

Aber es scheint, diese Objekte miteinander verknüpft sind:

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

Da Python keinen clone() Methode (es war das erste, was ich suchte), Wie würde ich einzigartige Objekte erstellen, ohne eine for Schleife zu deklarieren und append() aufrufen, um sie hinzuzufügen?

Vielen Dank!

+2

FWIW, die '' copy.copy() '' Funktion verwendet werden, können viele Arten von bestehenden Python-Objekte zu "klonen". Zusätzlich haben eine Anzahl veränderbarer Objekte (deques, sets, dicts) eine '' copy() '' Methode. Das Listenobjekt hat eine "copy()" -Methode in Python 3 erstellt. –

+0

Da die Frage geschlossen wurde, muss ich einen Kommentar verwenden, um den interessanten Teil Ihrer Frage zu beantworten: "Wie können Sie das ohne ein for tun? -schleppen und anhängen? " Folgendes können Sie tun: '' d = {'key': 'value'}; Importkopie; von itertools Import wiederholen; a = Liste (map (copy.copy, wiederhole (d, 10))) ''. Wenn eine '' copy() '' Methode verfügbar ist, wäre es noch schneller, * starmap * zu verwenden: '' a = list (starmap (d.copy, repeat ((), 10))). –

Antwort

3

Eine einfache Liste Verständnis sollte es tun:

>>> 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'}]