使用Python初始化多维列表遇到的问题详解
作者:惊瑟
这篇文章主要介绍了使用Python初始化多维列表遇到的问题详解,二维列表是将其他列表作为它的元素的列表,前一章介绍了如何使用一个列表来存储线性的元素集合,可以使用列表来存储二维数据,需要的朋友可以参考下
使用Python初始化多维列表遇到的问题
问题
我们知道有两种方式可以初始化一个m*n二维列表:
- 使用*
m, n = 3, 2 x = [[0] * n] * m
- 使用for
y = [[0] * 2 for i in range(3)] print(x) print(y)
乍一看, 两者得到的结果是相同的:
[[0, 0], [0, 0], [0, 0]]
[[0, 0], [0, 0], [0, 0]]
实则其中有大坑,我们试着修改下x,y:
x[1][1]=2 y[1][1]=2 print(x) print(y)
得到如下结果:
[[0, 2], [0, 2], [0, 2]]
[[0, 0], [0, 2], [0, 0]]
坑就在这,方法1得到的多维列表,内层列表其实只有一份拷贝,修改一个就等于修改所有,而方法2内部列表都是独立的个体,修改一个并不会传导到另一个:
x = [[0]*2]*3 y = [[0] * 2 for i in range(3)] print(*[id(i) for i in x]) print(*[id(i) for i in y])
输出:
2128813329536 2128813329536 2128813329536
2128813351680 2128813351616 2128813351488
结论
为了避免令人迷惑的结果出现, 初始化多维列表时尽量使用:
[[0]*n for i in range(m)]
到此这篇关于使用Python初始化多维列表遇到的问题详解的文章就介绍到这了,更多相关Python初始化多维列表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!