Python二维数组定义(List)问题

本文最后更新于:2024年10月13日 晚上

Python二维数组定义(List)问题

问题所在

采用如下定义出现问题:

1
2
3
4
n = 5
dp = [[0] * n] * n
dp[0][0] = 1
print(dp)

输出

1
2
3
4
5
[[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0]]

在改变dp[0][0]时把dp[i][0]都改变了。即每一行的改变都会改变其他行

修改后

正确定义为:

1
2
3
4
n = 5
dp = [[0] * n for _ in range(n)]
dp[0][0] = 1
print(dp)

输出

1
2
3
4
5
[[1, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]

问题探究

  • 直接赋值:其实就是对象的引用(别名)。
  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

Python二维数组定义(List)问题
https://furthur509.github.io/2024/10/06/Python二维数组定义(List)问题/
作者
Yang Mingxin
发布于
2024年10月6日
许可协议