Exkurs - Parameterübergabe in Python
Zeiger (ver)setzen
Wie bei Zuweisungen werden auch bei Parameterübergaben und bei Rückgaben von Funktionswerten Zeiger gesetzt. Zur Verdeutlichung betrachten wir das folgende Programmbeispiel.
def d(x):
print("x:", x)
print("id(x):", id(x))
y = x + x
print("y:", y)
print("id(y):", id(y))
return y
# Test
a = 2
print("a:", a)
print("id(a):", id(a))
a = d(a)
print("a:", a)
print("id(a):", id(a))
Bei der Ausführung werden folgende Ausgaben auf dem Bildschirm gemacht.
a: 2 id(a): 505300136 x: 2 id(x): 505300136 y: 4 id(y): 505300168 a: 4 id(a): 505300168
Die Diagramme veranschaulichen, wie die beteilgten Variablen ihre Daten verwalten.
a = 2 {a -> 2}

d(a) # Übergabe der Parameter {a -> 2, {x -> 2}}

y = x + x # Zuweisung an eine lokale Variable {a -> 2, {x -> 2, y -> 4}}

a = d(a) # Rückgabe und Weitergabe des Funktionswerts {a -> 4}

Der Mechanismus, der auf dem Setzen von Zeigern beruht, funktioniert auch, wenn - wie im folgenden Beispiel - gleichnamige Variablen benutzt werden.
def d(a):
print("a:", a)
print("id(a):", id(a))
a = a + a
print("a:", a)
print("id(a):", id(a))
return a
# Test
a = 2
print("a:", a)
print("id(a):", id(a))
a = d(a)
print("a:", a)
print("id(a):", id(a))
Bei der Ausführung werden folgende Ausgaben auf dem Bildschirm gemacht.
a: 2 id(a): 505300136 a: 2 id(a): 505300136 a: 4 id(a): 505300168 a: 4 id(a): 505300168
Die Diagramme veranschaulichen, wie die beteilgten Variablen ihre Daten verwalten.
a = 2 {a -> 2}

d(a) # Übergabe der Parameter {a -> 2, {a -> 2}}

a = a + a # Zuweisung an eine lokale Variable {a -> 2, {a -> 4}}

a = d(a) # Rückgabe und Weitergabe des Funktionswerts {a -> 4}
