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



我用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

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

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

虽然您确实有单独的全局变量和局部变量,但没有单独的全局和局部列表。qx都指同一个列表;参数传递机制不会创建列表的隐式副本。(Python几乎从不制作隐式副本。

相关内容

  • 没有找到相关文章

最新更新