6.1.3. Veränderung (S)#
Wie der Name bereits betont, sind Variablen variabel und können somit verändert werden.
Wir müssen jedoch zwischen zwei Veränderungen einer Variablen x unterscheiden:
der Veränderung ihrer Wertes
xder Veränderung ihrer Speicheradresse
id(x)(die auf den Wert zeigt)
Veränderlich und Unveränderlichkeit
Wir nennen eine Variable, veränderlich (engl. mutable) wenn wir deren Wert verändern können indem wir den Speicherbereich der Variable verändern können. Ein Variable ist dagegen unveränderlich (engl. immutable) wenn wir deren Speicherbereich nicht verändern können.
Ist eine Variable unveränderlich, so wird deren Veränderung durch eine Kopie (einen neuen Speicherbereich) realisiert. Das Ursprungsobjekt bleibt unverändert.
Eine Variable kann immer nur einen Wert bzw. auf einen bestimmten Speicherbereich zeigen. Weisen wir einer Variablen erneut einen Wert zu, wird dieser Wert in den Speicher an eine freie Adresse geschrieben und die Adresse der Variablen auf jene neue Adresse gesetzt.
half = 1/2
print(f'value of half = {half}')
print(f'id of half = {id(half)}')
x = 25
print(f'value of x = {x}')
print(f'id of x = {id(x)}')
x = 24
print(f'value of x = {x}')
print(f'id of x = {id(x)}')
value of half = 0.5
id of half = 140122515364784
value of x = 25
id of x = 94228538756776
value of x = 24
id of x = 94228538756744
Adressänderung
Veränderungen der einen Variablen haben keinen Effekt auf die Adresse bzw. Identität id anderer Variablen.
print(f'value of half = {half}')
print(f'id of half = {id(half)}')
value of half = 0.5
id of half = 140122515364784
Verändern wir Variablen nicht, so behalten sie ihre Adresse über das gesamte Notebook hinweg.
6.1.3.1. Zuweisung einer neuen Adresse#
Weisen wir einer Variablen x eine andere Variable y zu, so ändern wir die Adresse von x auf jene von y. Das heißt, nach der Zuweisung zeigen beide Variablen auf den gleichen Speicherbereich und damit auf den gleichen Wert.
x = 2131313
y = 10
z = 2131313
print(f'value of x = {x}')
print(f'id of x = {id(x)}')
print(f'value of y = {y}')
print(f'id of y = {id(y)}')
print(f'value of z = {z}')
print(f'id of z = {id(z)}')
value of x = 2131313
id of x = 140122515372432
value of y = 10
id of y = 94228538756296
value of z = 2131313
id of z = 140122515372464
y = x
print(f'value of x = {x}')
print(f'id of x = {id(x)}')
print(f'value of y = {y}')
print(f'id of y = {id(y)}')
print(f'value of z = {z}')
print(f'id of z = {id(z)}')
value of x = 2131313
id of x = 140122515372432
value of y = 2131313
id of y = 140122515372432
value of z = 2131313
id of z = 140122515372464