范围与Python中的变量和列表相同吗?

时间:2017-09-05 02:46:38

标签: python

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没有更新,但是列表已更新。这意味着全局变量不能从函数内部更改,但是列表和其他数据容器对象(如字典)是。

这是对的吗?有没有什么简单的方法可以在脑子里精神上模拟这个想法?

2 个答案:

答案 0 :(得分:0)

每当您将一个列表传递给函数时,您将传递其地址,因此可以在函数中更新它,而对于变量,您需要通过引用传递它以使其成功更新。

答案 1 :(得分:0)

默认情况下,函数中定义的变量(re)是本地的。 在您的情况下,x属于此类别。但是y[0] = "Herman"并没有重新定义y,它通过重新分配第一个元素来改变它。因此它不被认为是本地的。