【问题标题】:Function changes the global list in python instead of local list函数更改python中的全局列表而不是本地列表
【发布时间】:2017-10-23 19:42:28
【问题描述】:

我有这段代码是用 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 导师中可视化这段代码时,我知道 foo(x) 函数实际上会更改/交换原始/全局列表 'q' 中的元素,即使 'x' 应该具有本地范围。

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

【问题讨论】:

  • x 是可变的。与范围无关。你更改了x中的项目
  • 您没有单独的全局列表和本地列表。这里只有一个列表。见nedbatchelder.com/text/names.html
  • @Jean-FrançoisFabre 是的,我更改了 x 中的项目,而不是 q 中的项目。所以在第二个打印语句中,我调用了相同的语句,但输出为 False。为什么这样?我认为 q 保持不变,只有 x 改变了。
  • @user2357112 非常感谢。您可以回复为答案,以便我将其标记为正确答案。

标签: python list global-variables


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2013-07-15
    相关资源
    最近更新 更多