函数更改python中的全局列表而不是本地列表

时间:2017-10-23 19:42:28

标签: python list global-variables

我有用Python编写的代码:

def trick(l,i):
    if i==1:
        return l[0];
    else :
        return l[1]
def foo(x):
    x[0] = 'def'
    x[1] = 'abc'
    return x[1]
q = ['abc', 'def']
print(trick(q,1) == foo(q))
print(trick(q,1) == foo(q))
print(trick(q,0) == foo(q))

输出是这样的:

True
False
True

为什么第二个print语句打印“False”,即使第二个和第一个打印语句是相同的。当我在Python教程中可视化这段代码时,我知道foo(x)函数实际上改变/交换原始/全局列表'q'中的元素,即使'x'应该具有局部范围。

我无法理解这一点。请帮忙。

1 个答案:

答案 0 :(得分:1)

虽然您有单独的全局变量和局部变量,但您没有单独的全局和本地列表。 qx都指向相同的列表;参数传递机制不会生成列表的隐式副本。 (Python几乎从不制作隐式副本。)