Python中的语法差异列出了隐式变量替换中的赋值结果

nei*_*nor 0 python list variable-assignment

新手问题在这里.我很困惑为什么,只有在某些语法下,列表会在分配给它的其他列表得到更新时自动更新.例如,

如果我们将'a'分配给'b'并更新'b','a'仍然不受影响:

>>> b = [1,1,0]
>>> a = b
a = [1,1,0]
>>> b = [0,0,0]
a = [1,1,0]
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将最后一个更新命令重写为:

>>> b[:2] = [0]*2
a = [0,0,0] 
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Ste*_*ppo 5

因为ab是对象的引用.当你写:

a = b
Run Code Online (Sandbox Code Playgroud)

然后ab引用相同的对象,所以当你修改它作用于b,也a将发生变化.如果它们指向指针(并且在引擎盖下,它们),它们将指向同一个对象.

当你写:

b[:2] = [0, 0] # [0] * 2
Run Code Online (Sandbox Code Playgroud)

您正在修改列表,因此更改将反映出来a.

相反,当你写:

b = [0,0,0]
Run Code Online (Sandbox Code Playgroud)

b将引用一个新的,不同的列表,更改将不会反映出来a.