Seite 1 von 1

Pythons (gekoppelte) Listen (gelöst)

Verfasst: Freitag 19. Februar 2010, 16:30
von moose
Hi,

ich habe hier mal ein Snipplet, das seltsam ist:

Code: Alles auswählen

list1 = [1,2]
list2 = []
list2.append(list1)
list1.remove(1)
list2
Welche Ausgabe würdet ihr erwarten? Warum bekommt man die Ausgabe [[2]] und nicht [[1,2]]? Wie kann ich list1 verändern, ohne list2 zu verändern?

Ich nutze übrigens Python 2.6

Re: Pythons (gekoppelte) Listen

Verfasst: Freitag 19. Februar 2010, 16:41
von Leonidas
Hallo moose, willkommen im Forum,
moose hat geschrieben:Hi,

ich habe hier mal ein Snipplet, das seltsam ist:

Code: Alles auswählen

list1 = [1,2]
list2 = []
list2.append(list1)
list1.remove(1)
list2
Welche Ausgabe würdet ihr erwarten? Warum bekommt man die Ausgabe [[2]] und nicht [[1,2]]? Wie kann ich list1 verändern, ohne list2 zu verändern?
Ich würde erwarten dass genau das rauskommt, was dann auch tatsächlich kopierst. Du tust ja immer die gleiche ``liste1`` modifizieren. Wenn du sie unabhängig machen willst, musst du sie kopieren:

Code: Alles auswählen

list2.append(list1[:])

Verfasst: Freitag 19. Februar 2010, 16:46
von Ronnie
Weil eine Referenz von Liste 1 übergeben wird, und keine Kopie. So geht es:

Code: Alles auswählen

>>> list1 = [1,2]
>>> list2 = []
>>> list2.append(list1[:])
>>> list1.remove(1)
>>> list2
[[1, 2]]

Verfasst: Freitag 19. Februar 2010, 17:02
von moose
Vielen Dank! Nun klappts endlich :D