在Python中并不完全是这样的。Python 将引用传递给对象。在你的函数中,你有一个对象 -- 你可以自由地突变这个对象(如果可能的话)。然而,整数是 不变的 .一个变通的办法是在一个可以变异的容器中传递整数。
def change(x):
x[0] = 3
x = [1]
change(x)
print x
这充其量是丑陋/笨拙的,但在 Python 中你不会做得更好。原因是在Python中,赋值(=
)是将右手边的任何对象与左手边的任何对象绑定在一起*(或将其传递给适当的函数)。
Understanding this, we can see why there is no way to change the value of an 不变的 object inside a function -- you can't change any of its attributes because it's 不变的, and you can't just assign the "variable" a new value because then you're actually creating a new object (which is distinct from the old one) and giving it the name that the old object had in the local namespace.
通常情况下,解决方法是简单的return你想要的对象。
def multiply_by_2(x):
return 2*x
x = 1
x = multiply_by_2(x)
*在上述第一个例子中,3
实际上被传递给了x.__setitem__
。