Python3使用*产生列表的问题

分享一下Python3里面用*产生列表的坑

这里需要注意以下,Python3生成列表有两种方法:

1
2
a = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
a = [[0]*3]*3

都会生成

1
2
3
a = [ [0, 0, 0],
      [0, 0, 0],
      [0, 0, 0]]

但是这中间是有区别的。假如我要改变a[2][0]:

1
a[2][0] = 1

那么上面两个的结果是不一样的:

1
2
3
a = [[0, 0, 0], [0, 0, 0], [1, 0, 0]]

a = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]

使用*来产生的列表,好像其每一个子列表的地址是一样的。所以会导致改一个所有其他的都会改。

updatedupdated2023-06-082023-06-08