a = 1.111111
b = ["a", "b"]
def adder(x, y):
x = x *100000
y[0] = "Herman"
return x, y
print a
print b
print ""
adder(a,b)
print a # 1.111111 - has not updated
print b # ['Herman', 'b'] - has updated even if list is in gobal scope
对于Python中的列表和变量以及其他对象,Scope是否相同?在上面的测试中,当我调用/调用函数加法器时,var a没有更新,但是列表已更新。这意味着全局变量不能从函数内部更改,但是列表和其他数据容器对象(如字典)是。
这是对的吗?有没有什么简单的方法可以在脑子里精神上模拟这个想法?
答案 0 :(得分:0)
每当您将一个列表传递给函数时,您将传递其地址,因此可以在函数中更新它,而对于变量,您需要通过引用传递它以使其成功更新。
答案 1 :(得分:0)
默认情况下,函数中定义的变量(re)是本地的。
在您的情况下,x
属于此类别。但是y[0] = "Herman"
并没有重新定义y
,它通过重新分配第一个元素来改变它。因此它不被认为是本地的。