我有用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'应该具有局部范围。
我无法理解这一点。请帮忙。
答案 0 :(得分:1)
虽然您有单独的全局变量和局部变量,但您没有单独的全局和本地列表。 q
和x
都指向相同的列表;参数传递机制不会生成列表的隐式副本。 (Python几乎从不制作隐式副本。)