在python里,如何生成2D的list?看上去很简单:

# 错误的示范
a = [[0] * 3] * 3

我用,三个小时的debug,以及白跑3天程序的代价告诉大家:

千万不要这样!

千万不要这样!

千万不要这样!

我们来看看会发生什么:

>>> a=[[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0]=7
>>> a
[[7, 0, 0], [7, 0, 0], [7, 0, 0]]

懂了吧,[0]*3代表生成一个三维数组,每一项指向的都是不同的地址,而[[0]*3]*3生成的,则是三个指向[0]*3的引用。

也就是说,当其中任意一个数组发生改变时候,所有的三个数组都会随之一起变化。

那么正确的方式,是怎么样呢?

老老实实,用np吧(逃

什么,不想用np,那就在第一层for里头先构建一维数组,然后在第二层for构建第二层吧。。