是的,这是预期的行为。A、 b 和 c 都被设置为同一列表的标签。如果您想要三个不同的列表,则需要分别分配它们。您可以重复显式列表,也可以使用多种方法之一复制列表:
b = a[:] # this does a shallow copy, which is good enough for this case
import copy
c = copy.deepcopy(a) # this does a deep copy, which matters if the list contains mutable objects
Python 中的赋值语句不复制对象——它们将名称绑定到一个对象,并且一个对象可以有您设置的任意多个标签。在第一次编辑中,更改 a [0]时,要更新 a、 b 和 c 都引用的单个列表中的一个元素。在你的第二个变化 e 中,你把 e 变成了另一个对象的标签(4而不是3)。
# test
aux=[[0 for n in range(3)] for i in range(4)]
print('aux:',aux)
# initialization
a,b,c,d=[[0 for n in range(3)] for i in range(4)]
# changing values
a[0]=1
d[2]=5
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
>>> a,b,c = (1,2,3)
>>> a
1
>>> b
2
>>> c
3
>>> a,b,c = ({'test':'a'},{'test':'b'},{'test':'c'})
>>> a
{'test': 'a'}
>>> b
{'test': 'b'}
>>> c
{'test': 'c'}
>>>