我需要深入了解以下代码。第一次打印会输出:'a',而将y[0][0]
的值更改为“ p”时,它将更改y[0][0]
,y[1][0]
,y[2][0]
和{{ 1}}。我原本期望像y[3][0]
这样的输出,但是却得到[['p', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]
[['p', 'b', 'c'], ['p', 'b', 'c'], ['p', 'b', 'c'], ['p', 'b', 'c']]
答案 0 :(得分:1)
由于*
运算符不精确,有点有趣,因此请使用range
。
通过替换以下行将起作用:
y = [x] * 4
使用:
y = [x.copy() for i in range(4)]
使用copy
创建其他内容的副本,实际上copy
在print
进行创建时创建了相同的内容,但实际上是不同的id
,不同的对象,因此您的代码不会再进行上述复制。
此外,您的问题已经作为以下项目的重复出现:
List of lists changes reflected across sublists unexpectedly
其中有更好的解释。