python二维列表切片赋值不能实现深拷贝

python二维(多维)列表深拷贝

python一维数组拷贝方法

我们都知道如果直接使用等号进行列表赋值将会导致两个列表共享内存而导致修改其中一个另外一个都会相应改变,所以我们常用切片赋值进行深拷贝,也就是a=b[:]这种方法(假设b= [1,2,3]),这样两者就完全区别开不再相互影响。于是我们自然想到对于二维数组是否可以同样操作实现深拷贝,博主在使用的时候却发现了不一样的地方。如下:

grid = [[1,3,1],[1,5,1],[4,2,1]]
dp1 = grid[:][:]
dp1[0][0] = 2
->grid:[[2,3,1],[1,5,1],[4,2,1]]
->dp1:[[2,3,1],[1,5,1],[4,2,1]]

可以看到两者同时发生了改变,那应该怎么复制才能实现深拷贝呢?

python二维数组拷贝方法

可以像下面这样:

grid = [[1,3,1],[1,5,1],[4,2,1]]
dp = [[grid[i][j] for j in range(len(grid[0]))] for i in range(len(grid))]
dp[0][0] = 3
->grid:[[1,3,1],[1,5,1],[4,2,1]]
->dp1:[[3,3,1],[1,5,1],[4,2,1]]

可以看到两个数组不再互相关联,实现了深拷贝,但是这样略显麻烦,博主还会继续探索,有了新的发现还会发出来!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值