在python

时间:2018-12-28 05:28:36

标签: python python-3.x

我需要深入了解以下代码。第一次打印会输出:'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']]

1 个答案:

答案 0 :(得分:1)

由于*运算符不精确,有点有趣,因此请使用range

通过替换以下行将起作用:

y = [x] * 4

使用:

y = [x.copy() for i in range(4)]

使用copy创建其他内容的副本,实际上copyprint进行创建时创建了相同的内容,但实际上是不同的id,不同的对象,因此您的代码不会再进行上述复制。

此外,您的问题已经作为以下项目的重复出现:

List of lists changes reflected across sublists unexpectedly

其中有更好的解释。