Seite 1 von 1

Veränderbare Listen

Verfasst: Dienstag 27. Februar 2018, 14:08
von beerus
Hallo Leute
Mir ist ein Verhalten bei Set und Listen aufgefallen, welches mir nicht einleuchtet. Nicht, dass das als Anfänger wichtig ist, aber ich probiere immer alles von A bis Z zu verstehen :D

Code: Alles auswählen

l1=[1,1,2,2,3,44,5,6,7]

l2 =l1


l1 =list(set(l1))

Unklarheit:
Listen sind ja Mutable, in diesem Beispiel habe ich eine Liste erstellt, diese mit Zahlen beglückt. Danach habe ich eine zweite Variable erstellt, die auf die Instanz der Liste zeigt. Ich glaube, soweit habe ich das bei Python verstanden :D
Zu guter letzt, habe ich die Liste von unnötigen Einträgen entfernt. Dafür habe ich im Setkonstruktor eine Liste übergeben.
Rufe ich allerdings die Methode print am Ende für l1 und l2 auf, passiert nicht das, was ich erwarte.
Ich erwarte, dass bei beiden Listen die doppelten Einträge verschwinden. Bei der l1-Variable, ist das gut von statten gegangen. Bei l2, welche ja auf die Instanz l1 zeigt, weniger.
Welches Detail übersehe ich da?
Oder meint ihr, als Anfänger sollten mich solche Sachen nicht kümmern?

Re: Veränderbare Listen

Verfasst: Dienstag 27. Februar 2018, 14:34
von kbr
@beerus: Du hast mit set() ein neues Objekt erstellt, dann in eine Liste konvertiert, und an l1 zugewiesen. Die ursprüngliche Liste ist aber nach wie vor existent und über l2 erreichbar.

Re: Veränderbare Listen

Verfasst: Dienstag 27. Februar 2018, 14:41
von beerus
kbr hat geschrieben:@beerus: Du hast mit set() ein neues Objekt erstellt, dann in eine Liste konvertiert, und an l1 zugewiesen. Die ursprüngliche Liste ist aber nach wie vor existent und über l2 erreichbar.
Ah, da liegt der Hund begraben. Vielen dank.
Ich ging davon aus, dass die gleiche Liste bearbeitet wird.
Sorry, war vermutlich eine dumme Frage, aber für mich war es nicht direkt ersichtlich, dass ich ein neues Objekt erstellt habe.

Re: Veränderbare Listen

Verfasst: Dienstag 27. Februar 2018, 14:57
von snafu
Du hast nen Denkfehler drin. Dem Set ist es egal, welches Objekt die Elemente zusammen hält. Es erwartet bloß etwas, was es durchlaufen kann und es interessiert sich nur für die Elemente an sich.

Re: Veränderbare Listen

Verfasst: Dienstag 27. Februar 2018, 15:09
von Sirius3
@beerus: der Normalfall ist, dass neue Objekte erzeugt werden. Es gibt in der Standardbibliothek nur sehr wenige Funktionen, die Objekte wirklich ändern, und diese sind dann Methoden des jeweiligen Objekts, z.B: `list.sort`, `list.remove`, etc. Allen ändernden Funktionen gemein ist, dass sie keinen Rückgabewert haben (Ausnahme: list.pop)