Python列表赋值——令人费解的行为

Python列表赋值——令人费解的行为,python,list,Python,List,我对Python中的列表有着奇怪的行为。有两个级别,但取决于我如何设置列表,编辑其中一个级别要么只编辑正确的元素,要么编辑共享第二个引用的所有元素 这可以总结如下——b和c在本质上是相同的(Python显示它们是等效的)。然后我通过更改[1][1]条目以相同的方式编辑它们,但是对于b,这会影响任何第二个索引为1的条目(即添加到b[1][1]更改b[2][1]),其中对于c它只更改c[1][1]。这种行为非常令人费解,显然b赋值中的某些东西将索引实体彼此关联起来。有人知道发生了什么吗 b = 10

我对Python中的列表有着奇怪的行为。有两个级别,但取决于我如何设置列表,编辑其中一个级别要么只编辑正确的元素,要么编辑共享第二个引用的所有元素

这可以总结如下——b和c在本质上是相同的(Python显示它们是等效的)。然后我通过更改
[1][1]
条目以相同的方式编辑它们,但是对于b,这会影响任何第二个索引为1的条目(即添加到
b[1][1]
更改
b[2][1]
),其中对于
c
它只更改
c[1][1]
。这种行为非常令人费解,显然
b
赋值中的某些东西将索引实体彼此关联起来。有人知道发生了什么吗

b = 10*[4*[0]]
c = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];

print(b==c);

b[1][1] += 2;
c[1][1] += 2;

print(b==c); 

请注意,后面的分号
打印后的code>是多余的。@wnmaw这不是正确的dup。@AshwiniChaudhary,哎呀,我的零件列表
b
中粗心的阅读包含了对同一列表
[0,0,0,0]
的十个引用,因此对
b
中任何一项的修改都会影响到它们。对范围(10)中的i使用
b=[4*[0]
类似于您对
c
@Stefano所做的分配,就像所有这些一样。