[Python-de] Re: for unpacking

Mike Müller <mmueller-Nw5JoyH4ZXncp1/[email protected]> Wed, 7 Aug 2024 09:14:16 +0200
Newsgroups gmane.comp.python.general.german
Organization Python Academy GmbH & Co. KG
Message-ID <[email protected]>
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 -- [email protected]
> Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an 
> [email protected]
> https://mail.python.org/mailman3/lists/python-de.python.org/
> Mitgliedsadresse: [email protected]

_______________________________________________
python-de Mailingliste -- [email protected]
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected]
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: [email protected]