2013-05-24 12 views

Odpowiedz

7
[[]] * 2 

sprawia shallow copy. Odpowiednik:

x = [] 
t0 = [x, x] 

Jednak

t1 = [[], []] 

wykorzystuje dwa oddzielne pusta lista literały są całkowicie różne, tak mutacji jednego oczywiście nie mutują drugi

+0

Jeśli chcę zadeklarować listę z pustą listą, jak mogę to zrobić? –

+0

@ user1807991 'items = [[] dla i w zakresie (N)]' zauważ, że po prostu używa pustej literału listy w zrozumieniu listy, aby upewnić się, że są oddzielne – jamylak

10

Gdy wykonasz [[]] * 2, otrzymasz listę zawierającą dwie z następujących opcji: z tą samą listą, zamiast dwóch list. To jest jak robi:

a = [] 
b = [a, a] 

Zwykłym sposobem zrobić listę zawierającą kilka różne pustych list (albo inne zmienne obiektów) jest w tym celu:

t1 = [[] for _ in range(5)] 
+0

Jeszcze lepiej może być podkreślić, zmienny, vs niezmienne obiekty. Na przykład pokazuje różnicę w zachowaniu z krotkami i listami? – Arafangion

Powiązane problemy