创建二维列表有如下两种方式:
#第1种方式:
>>> right_matrix = [[0] * col for _ in range(row)]
#第2种方式:
>>> wrong_matrix = [[0] * col] * row
>>> print(right_matrix)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> print(wrong_matrix)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
看着好像一样。。。然而第2种只要改变某行的某个元素,其它行也会跟着一起变。。。。
>>> right_matrix[0][0] = 1
>>> print(right_matrix)
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] # 正常
>>> wrong_matrix[0][0] = 1
>>> print(wrong_matrix)
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] # 不正常,每行第一列都被更新成了1
所以,创建二维列表最好用第1种方式right_matrix,即right_matrix中每个list对象都有独立的内存空间,而wrong_matrix中每个list对象指向同一块内存空间。
版权声明:本文为weixin_43646592原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。