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-le...@python.org
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: mmuel...@python-academy.de

_______________________________________________
python-de Mailingliste -- python-de@python.org
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an 
python-de-le...@python.org
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: arch...@mail-archive.com

Reply via email to