Python 有什么不为人知的坑?
关注者
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)]