如果用Python初始化一个长度为n的一维list,很简单,只需:

ls = [0] * n

初始化元素为n个0。但是对于二维,如果简单用这个方法扩展就很容易出错:

ls = [[0] * n] * m

就会出现问题。把每个一维list当作元素,上面的代码只会把[[0] _ n]的引用复制m倍,并不会开辟m_n个单位的内存空间来。

这个时候,满足ls[0]的地址跟ls[1],…, ls[m-1]的地址完全一样:

id(ls[0]) == id(ls[1])
# True

这时,改变ls[0]的数值就会改变到ls[1]的数值。
相信这样的初始化效果,并不是码工们的初衷~

如果需要开辟m*n个单位的内存空间该怎么做呢?
如下:

ls = [[0] * n for _ in range(m)]