Explain this inconsistency
本问题已经有最佳答案,请猛点这里访问。
这里有两种方法。一个修改变量x,另一个不修改。你能解释一下为什么会这样吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | x = [1,2,3,4] def switch(a,b,x): x[a], x[b] = x[b], x[a] switch(0,1,x) print(x) [2,1,3,4] def swatch(x): x = [0,0,0,0] swatch(x) print(x) [2,1,3,4] |
函数定义
1 | def swatch(x): |
将
1 | x = [0, 0, 0, 0] |
将局部变量
你可以从
1 2 | def swatch(): x = [0, 0, 0, 0] |
但是当python在函数定义中遇到赋值时
1 | x = [0, 0, 0, 0] |
默认情况下,python会将
要告诉python您希望
1 2 3 4 | def swatch(): global x x = [0,0,0,0] swatch() |
但是,在这种情况下,由于
1 2 | def swatch(x): x[:] = [0,0,0,0] |
虽然
1 | swatch(x) # the global variable x |
它指向与同名全局变量相同的列表。
1 2 | def switch(a,b,x): x[a], x[b] = x[b], x[a] |
是另一个例子,其中