This question already has answers here:
List of lists changes reflected across sublists unexpectedly
                                
                                    (13个回答)
                                
                        
                                12个月前关闭。
            
                    
我需要深入了解以下代码。第一次打印输出给我:'a',而将y[0][0]的值更改为“ p”时,它也会同时更改y[0][0]y[1][0]y[2][0]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']]

x=["a","b","c"]
y = [x] * 4
# first print
print(y[0][0])

y[0][0] = "p"
# second print
print(y)

最佳答案

因为*运算符不精确,所以有点有趣,因此请使用range

替换下面的行即可使用:

y = [x] * 4


带有:

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


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

另外,您的问题已作为以下项目的重复项目而关闭:

List of lists changes reflected across sublists unexpectedly

其中有更好的解释。

关于python - 在python中解释嵌套列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53954049/

10-17 02:30