Python二维数组不同初始化方式的差异

在Python中,一个m行n列的二维数组有两种常见的初始化方式:

  1. a=[[0 for j in range(n)] for i in range(m)]

  1. 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)

运行结果:

所以极不推荐第二种初始化方式,除非遇到以下两种情况可以考虑使用:

  1. 只是初始化一维数组。

  1. 初始化二维数组后没有改变元素的需求(这一点很难保证,因为说不定以后什么时候就需要改变了)。

猜你喜欢

转载自blog.csdn.net/beilunc7/article/details/129737948