Seite 1 von 1
Kleine Tupel-Verständnisfrage
Verfasst: Freitag 15. Mai 2009, 22:00
von kathiley
hallo,
also ich sitze gerade an einem Problem, das ich irgendwie nicht verstehe.
Code: Alles auswählen
backup_list = [Inhalt1, Inhalt2]
entry = InhaltX
new_list = backup_list
repeat = 3
while (repeat>0):
new_list.append(entry)
repeat = repeat-1
print backup_list
print new_list
Wieso sind am Ende beide Listen gleich? Also:
Code: Alles auswählen
new_list = [Inhalt1, Inhalt2, InhaltX, InhaltX, InhaltX]
backup_list = [Inhalt1, Inhalt2, InhaltX, InhaltX, InhaltX]
In der while Schleife wird die backup_list doch nicht verändert.

:K
Re: Kleine Tupel-Verständnisfrage
Verfasst: Freitag 15. Mai 2009, 22:10
von numerix
kathiley hat geschrieben:hallo,
also ich sitze gerade an einem Problem, das ich irgendwie nicht verstehe.
Code: Alles auswählen
backup_list = [Inhalt1, Inhalt2]
entry = InhaltX
new_list = backup_list
repeat = 3
while (repeat>0):
new_list.append(entry)
repeat = repeat-1
print backup_list
print new_list
Wieso sind am Ende beide Listen gleich? Also:
Code: Alles auswählen
new_list = [Inhalt1, Inhalt2, InhaltX, InhaltX, InhaltX]
backup_list = [Inhalt1, Inhalt2, InhaltX, InhaltX, InhaltX]
In der while Schleife wird die backup_list doch nicht verändert.

:K
Doch, weil
keine Kopie der Liste erzeugt, sondern nur eine weitere Referenz auf das gleiche Listenobjekt ist. Eine (einfache) Kopie kannst du so erzeugen:
Verfasst: Freitag 15. Mai 2009, 22:18
von kathiley
hmm, hab ich mir schon irgendwie gedacht
danke für die schnelle Hilfe
jetzt darf ich auch noch ein paar andere Skripte umschreiben, da hat es bis jetzt irgendwie immer geklappt, naja, mehr Glück als Verstand sag ich nur dazu

Verfasst: Freitag 15. Mai 2009, 22:22
von HerrHagen
Das Objektsystem von Python ist ein wenig anders aufgebaut als in C & Co.
Mit [Inhalt1, Inhalt2] erzeugst du ein neues Objekt (vom Typ Liste). Mit backup_list = ... erstellst du eine Referenz (also quasi eine Art Namen über die man das Objekt ansprechen kann) zu diesem Objekt. mit new_list = backup_list erstellst du eine weitere Referenz auf das Objekt (also vergibst quasi nur einen neuen Namen für das selbe Objekt). Wenn du das Objekt nun änderst, bekommst du die geänderte Version egal unter was für einen Namen du nun das Objekt ansprichst.
In Python gibt es auch unveränderliche Objekte (immutable) wie z.B. int's oder tupel. Da man diese nicht verändern kann, verhalten sie sich diese wie von dir erwartet.
PS: while (repeat>0): -> das ist ja schrecklich
Wenn du etwas n mal wiederholen willst schreib lieber for i in range(n): ...
Verfasst: Freitag 15. Mai 2009, 22:38
von kathiley
danke, wieder was dazu gelernt
... und keine Angst, in der while-Bedingung sind noch einige andere Faktoren drin, die ich hier nur rausgenommen habe