python之list中元素修改问题(二维列表修改部分元素)

之前python做题用到了二维List

l=[[3]*3]*4

但是,当我想将l[0][0]=0的时候,输出却变成了这样

查阅资料后发现list的浅拷贝问题,二维列表里面保存的是一维列表的地址,我这样赋值是把第一个[3]*3也就是[3,3,3,3]的地址复制了三遍,所以之后修改任意一行的其中元素,其他行的对应位置元素也会被改变。包括以下几种赋值方式都是浅拷贝:

l=[[3 for i in range(3)]]*4

l=[list(3 for i in range(3))]*4

l1=[3]*3

for i in range(4):

    l.append(l1)

正确的方法如下:

l=[[3]*3 for i in range(3)]

l=[]

for i in range(4):

    l.append([3]*3)

猜你喜欢

转载自blog.csdn.net/nlxxqqh1/article/details/88319721