Thema: Wieso werden zwei Listen bearbeitet?
Hallo liebe Programmierer Community,
ich bin beim Schreiben eines kleinen Programms über ein komisches Problem gestolpert, dass jemand hier vielleicht klären kann.
Python-Code
eingabe = list("test") ausgabe = [] print eingabe ausgabe = eingabe ausgabe.insert(1,"4") print ausgabe print eingabe
Es gibt zwei Listen - eine Masterliste (Eingabe) und eine bearbeitbare Liste (Ausgabe). Eigentlich müsste das Ergebnis dieses Codes folgendermaßen aussehen:
['t', 'e', 's', 't']
['t', '4', 'e', 's', 't']
['t', 'e', 's', 't']
tatsächlich wird jedoch mit dem Befehl .insert beide Listen angepasst und das Ergebnis ist:
['t', 'e', 's', 't']
['t', '4', 'e', 's', 't']
['t', '4', 'e', 's', 't']
Wieso ist das der Fall und wie kann ich das unterbinden??
----
edit 1:
Den Grund habe ich gerade gefunden:
Python-Code
eingabe = list("test") ausgabe = [] print id(eingabe) print id(ausgabe) print eingabe ausgabe = eingabe print id(ausgabe) print id(eingabe) ausgabe.insert(1,"4") print ausgabe print eingabe
gibt mir:
140641828776920
140641828774832
['t', 'e', 's', 't']
140641828776920
140641828776920
['t', '4', 'e', 's', 't']
['t', '4', 'e', 's', 't']
d.h. Python gibt beiden Variablen einfach den selben Speicher - und somit werden beide Variablen natürlich gleichzeitig angepasst. Die Frage der Unterbindung ist damit aber noch offen...
---
edit 2:
Jetzt habe ich auch selbst die Lösung gefunden:
Python-Code
eingabe = list("test") ausgabe = [] ausgabe = eingabe + ausgabe print id(ausgabe) print id(eingabe) print " " ausgabe.insert(1,"4") print id(ausgabe) print id(eingabe) print ausgabe print eingabe
indem man nicht die Variablen einfach gleichsetzt muss man die Listen stattdessen addieren. Das Ergebnis ist (das gewünschte):
140641828777424
140641828775480
140641828777424
140641828775480
['t', '4', 'e', 's', 't']
['t', 'e', 's', 't']
Beitrag editiert (04.03.2016 12:32 Uhr)
Beitrag editiert (04.03.2016 12:41 Uhr)
Beitrag editiert (04.03.2016 12:41 Uhr)