bremer hat geschrieben:Wie kommt es, dass die Methode an die jeweils andere Variable ebenfalls weitergereicht wird, während eine Neuzuweisung nur auf eine wirkt?
In dem Satz ist ein grundlegender Fehler vorhanden der dein Verständnis beeinflusst: Die Bezeichnung Variable. Im Gegensatz zu Sprachen wie z.B. C gibt es in Python keine Variablen.
Es gibt Objekte und Referenzen auf diese.
1 ist hier ein Objekt und foo ist ein Name, dieser Name stellt die Referenz zu dem Objekt 1 dar. Schreibe ich:
Habe ich wieder ein Objekt 1 und diesmal zwei Namen die Referenzen auf 1 sind.
Wenn ich nun foo ein neues Objekt zuweise, z.B. so:
Ist foo eine Referenz auf dass Objekt 2. bar zeigt weiterhin auf dass immernoch existierende Objekt 1.
An dieser Stelle ist vielleicht ein Blick auf "del" interessant, del löscht Referenzen auf Objekte aber nicht das Objekt. Objekte werden vom GC entfernt wenn es keine Referenz mehr gibt (in der Praxis variert das je nach Implementation leicht, CPython cacht z.B. Integer dass führt zu verwirrenden Effekten bei dem Operator is).
Kommen wir zu einer Liste, einem veränderbaren Objekt.
Du hast in deinem Beispiel 2 Namen, die jeweils eine Referenz auf ein und dieselbe Liste sind. Du veränderst diese Liste mit der Methode append und völlig egal welche Referenz du dafür verwendet hast beide Referenzen zeigen immer noch auf die Liste, welche du verändert hast.
Ich hoffe dass war verständlich ansonsten ist vielleicht noch
dieser, imho ziemlich gelungene, Blog Artikel von dennda interessant.