在Python中,一个m行n列的二维数组有两种常见的初始化方式:
a=[[0 for j in range(n)] for i in range(m)]
a=[[0*n]*m]
第一种初始化方式通过两层for循环,创建了m*n个元素,是深拷贝。
但是第二种初始化方式就需要注意了,它是浅拷贝。0*n是将0的索引复制了n遍,然后[0*n]*m是将0*n的索引复制了m遍。所以如果某一行的某个元素发生了改变,其他行的对应列位置的元素也会跟着一起改变。比如下面的例子:
a=[[0]*3]*3
print(a)
a[1][1]=1
print(a)
运行结果:
所以极不推荐第二种初始化方式,除非遇到以下两种情况可以考虑使用:
只是初始化一维数组。
初始化二维数组后没有改变元素的需求(这一点很难保证,因为说不定以后什么时候就需要改变了)。