Pythons (gekoppelte) Listen (gelöst)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
moose
User
Beiträge: 7
Registriert: Freitag 19. Februar 2010, 16:26

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
Zuletzt geändert von moose am Freitag 19. Februar 2010, 17:03, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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[:])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

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]]
Achtung: User ist ein Python-Lehrling!
moose
User
Beiträge: 7
Registriert: Freitag 19. Februar 2010, 16:26

Vielen Dank! Nun klappts endlich :D
Antworten