Am 06.08.24 um 22:57 schrieb Patrick Rudin über python-de:
Vermutlich habe ich irgendwas falsch verstanden, wie unpacking funktioniert. Jedenfalls:
zahlen = [[5,5,5]] zahlen.append([9,9,9])
for t in zahlen: t[1] += t[2]
nummern = [[5,5,5]] nummern.append([9,9,9])
for a,b,c in nummern: b += c
Auf der Konsole dann abgefragt: zahlen Out[7]: [[5, 10, 5], [9, 18, 9]]
nummern Out[8]: [[5, 5, 5], [9, 9, 9]]
Ich kapier das nicht. Funktioniert unpacking nur lesend? Oder wie kann ich einen Wert während der For-Schlaufe ändern, ohne die umständliche Notation zu verwenden?
Wie schon in den anderen Antworten ausführlich erklärt, ist ein Objekt mit dem Datentyp `int` unveränderlich (immutable). Daher kann sich dessen Wert nicht ändern. Der Name `b` lässt sicher aber für neue Objekte nutzen. Alle Objekte haben eine für ihre gesamte Lebenszeit feste Kennung, eine ID. Die eingebaute Funktion `id()` gibt diese zurück. Die Ausgabe der ID für `b` vor und nach der Zuweisung mit `+=` macht deutlich, das ein neues Objekt entsteht, da `b` eine neue ID bekommt: nummern = [[5,5,5]] nummern.append([9,9,9]) for a,b,c in nummern: print('vorher: ', id(b)) b += c print('nachher:', id(b)) Ausgabe: vorher: 4375044856 nachher: 4375045016 vorher: 4375044984 nachher: 4375045272 Nach meiner Erfahrung ist so eine Anzeige von IDs eine gute Ergänzung zu grundsätzlichen Erläuterungen zum Thema Objekte und deren Veränderbarkeit. Viele Grüße Mike
Grüsse
Patrick _______________________________________________ python-de Mailingliste -- python-de@python.org Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an python-de-leave@python.org https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: mmueller@python-academy.de