List=[[0]*n]*n 创建二维列表

72 阅读1分钟

因为创建二维数组的方式不对,我被卡在这里2个多小时,还全然没发现问题何在,问了GPT才明白缘故,印象深刻,必须记录一下

  • 二维数组创建方式一:
n = 2
List = [[0] * n for _ in range(n)]
List[0][0] = 1
print(List)  # [[1, 0], [0, 0]]
  • 二维数组创建方式二:
n = 2
List = [[0]*n]*n
List[0][0] = 1
print(List)  # [[1, 0], [1, 0]]

第一种创建方式,使用列表推导式生成了一个包含n个内层列表的二维数组,每个内层列表都是独立创建的,改变其一,其他不会发生变化

第二种创建方式,使用简单的乘法来复制列表,这种复制方式是浅拷贝,改变其一,其他都会发生变化。

推荐使用第一种构建二维列表的方式。