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

之前python做题用到了二维List

l=[[3]*3]*4

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

查阅资料后发现list的浅拷贝问题,二维列表里面保存的是一维列表的地址,我这样赋值是把第一个[3]*3也就是[3,3,3]的地址复制了四遍,这个二位列表看似有了四个一维的[3,3,3],但是其实它们在内存里都是指向一个对象,所以之后修改任意一行的其中元素,其他行的对应位置元素也会被改变。

包括以下几种赋值方式都是浅拷贝:

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

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

3.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)

总的来说,就是要注意二位list中保存的是一维list的地址,创建二维list要注意里面不要将一个一维list的地址复制多次。

拓展:Python中的copy方法是浅拷贝,深拷贝需要使用deepcopy方法。

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值