Python 有什么不为人知的坑?

首先得声明一下,本人可不是在黑Python,事实上目前正在用Python做项目,而且在接触Python这些时间之后,已经不大使用C++和Delphi了…
关注者
3,260
被浏览
555,689
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

今天刚遇到一个,我想初始化一个全为0的二维数组,用如下方法:

row, col = 2, 3
mat = [[0]*col]*row
print(mat)  # [[0, 0, 0], [0, 0, 0]]

好像没什么问题,当我给它赋值时,出现问题了

mat[0][0] = 1
print(mat)  # [[1, 0, 0], [1, 0, 0]]

本来想把第1行第1列赋值为 1, 但结果是每一行的第1列都是 1,原因是这样操作把[0]*col这个list进行了浅拷贝,所以row个行实际上是同一个list的引用,改变一行,则每一行都会改变。

为了避免这个问题,我们可以采用列表推导的方法:

mat = [[0 for _ in range(col)] for _ in range(row)]