In Python funktioniert das nicht ganz so. Python übergibt Verweise auf Objekte. Innerhalb Ihrer Funktion haben Sie ein Objekt - Sie können dieses Objekt (wenn möglich) mutieren. Ganzzahlen sind jedoch unveränderlich . Eine Problemumgehung besteht darin, die Ganzzahl in einem Container zu übergeben, der mutiert werden kann:
def change(x):
x[0] = 3
x = [1]
change(x)
print x
Das ist bestenfalls hässlich / ungeschickt, aber in Python werden Sie es nicht besser machen. Der Grund dafür ist, dass Zuweisung ( =
) in Python jedes Objekt nimmt, das das Ergebnis der rechten Seite ist, und es an alles bindet, was sich auf der linken Seite befindet * (oder es an die entsprechende Funktion übergibt).
Wenn wir dies verstehen, können wir sehen, warum es keine Möglichkeit gibt, den Wert eines unveränderlichen Objekts innerhalb einer Funktion zu ändern. Sie können keines seiner Attribute ändern, weil es unveränderlich ist, und Sie können der "Variablen" nicht einfach eine neue zuweisen Wert, weil Sie dann tatsächlich ein neues Objekt erstellen (das sich vom alten unterscheidet) und ihm den Namen geben, den das alte Objekt im lokalen Namespace hatte.
Normalerweise ist die Abhilfe einfach zurückgeben das Objekt , das Sie wollen:
def multiply_by_2(x):
return 2*x
x = 1
x = multiply_by_2(x)
* Im ersten Beispielfall oben wird 3
tatsächlich an übergeben x.__setitem__
.