如果我的问题非常简单或明显,请不要苛刻.我是一个Python新手,所以刚刚开始.
实际上这只是我在Stack Overflow上遇到的一段代码,但是找不到为什么会发生这种情况的答案,所以决定自己问一下.
我写了以下两个程序:
1)
x=[1,2,3]
y=x
print x
y=y+[3,2,1]
print x
Run Code Online (Sandbox Code Playgroud)
输出:
[1,2,3]
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
2)
x=[1,2,3]
y=x
print x
y+=[3,2,1]
print x
Run Code Online (Sandbox Code Playgroud)
输出:
[1,2,3]
[1,2,3,3,2,1]
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这两种输出在这种情况下是不同的?是y=y+(something)不一样的y+=(something)
我在这里失踪的是什么?
非常感谢帮助我解决这个问题
这与可变性无关.它与列表对象和对它的引用有关.
当你这样做时:
y=x
Run Code Online (Sandbox Code Playgroud)
您实际上是在y引用相同的列表x.
现在,
y=y+[3,2,1]
^-------^ - Create a **new** List is that is equal to concatenation of `y` and [1,2,3]
^---^ - Bind variable `y` to this **new** list.
- The original list which `x` refered to -- is still *intact*
Run Code Online (Sandbox Code Playgroud)
再次,
y+=[3,2,1]
^-------^ - Append [1,2,3] **in-place**.
- Since even `x` is pointing to the same list, it gets modified.
Run Code Online (Sandbox Code Playgroud)