您无法在Python函数中更改不可变的对象(例如
str或)
tuple,但可以执行以下操作:
def foo(y): y[0] = y[0]**2x = [5]foo(x)print x[0] # prints 25
但是,这是一种怪异的解决方法,除非您需要始终将数组中的某些元素平方。
请注意,在Python中,您还可以返回多个值,从而使得通过引用传递的一些用例不那么重要:
def foo(x, y): return x**2, y**2a = 2b = 3a, b = foo(a, b) # a == 4; b == 9
当您返回这样的值时,它们将作为元组返回,而元组又将解压缩。
编辑:
另一种思考方式是,虽然您无法在Python中通过引用显式传递变量,但可以修改传入的对象的属性。在我的示例(及其他示例)中,您可以修改列表的成员但是,您将无法完全重新分配传入的变量。例如,请参见下面的两段代码,看起来它们可能会执行类似的操作,但最终结果不同:
def clear_a(x): x = []def clear_b(x): while x: x.pop()z = [1,2,3]clear_a(z) # z will not be changedclear_b(z) # z will be emptied



