Veränderbare Listen

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
beerus
User
Beiträge: 6
Registriert: Mittwoch 21. Februar 2018, 14:27

Dienstag 27. Februar 2018, 14:08

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?
Benutzeravatar
kbr
User
Beiträge: 957
Registriert: Mittwoch 15. Oktober 2008, 09:27

Dienstag 27. Februar 2018, 14:34

@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.
beerus
User
Beiträge: 6
Registriert: Mittwoch 21. Februar 2018, 14:27

Dienstag 27. Februar 2018, 14:41

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.
Benutzeravatar
snafu
User
Beiträge: 5632
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 27. Februar 2018, 14:57

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.
shcol (Repo | Doc | PyPi)
Sirius3
User
Beiträge: 8804
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 27. Februar 2018, 15:09

@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)
Antworten