2015-08-09 48 views
7

Możliwe jest „wypełnienie” tablicy w Pythonie tak:Zrób listę unikatowych obiektów w Pythonie

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

chciałem wykorzystać tę zasadę próbki szybko stworzyć listę podobnych obiektów:

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

Ale wydaje się, te obiekty są połączone ze sobą:

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

Biorąc pod uwagę, że Python nie posiadaMetoda(to była pierwsza rzecz, której szukałem), jak utworzyć unikatowe obiekty bez potrzeby zadeklarowania pętli for i wywołania append(), aby je dodać?

Dzięki!

+2

FWIW Z '' copy.copy() '' Funkcja ta może być używana do „klon” wiele rodzajów istniejących obiektów Pythona. Ponadto pewna liczba zmiennych obiektów (deques, sets, dicts) ma metodę '' copy() ''. Obiekt listy rozwinął metodę '' copy() '' w Pythonie 3. –

+0

Ponieważ pytanie zostało zamknięte, będę musiał użyć komentarza, aby odpowiedzieć na interesującą część twojego pytania: "jak możesz to zrobić bez -połącz i dołącz? Oto, co możesz zrobić: '' d = {'key': 'value'}; importuj kopię; od powtórzenia importu itertools; a = lista (mapa (copy.kopia, powtórz (d, 10))) ''. Gdy dostępna jest metoda '' copy() ', to jeszcze szybciej byłoby używać * starmap * w ten sposób:' 'a = list (starmap (d.kopia, repeat ((), 10)))' '. –

Odpowiedz

3

Prosta lista rozumienie powinno załatwić sprawę:

>>> 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'}] 
Powiązane problemy