之前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)