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