【发布时间】:2011-12-10 04:01:50
【问题描述】:
这两个数组声明在Python中有什么区别?
table = [[0]*100]*100
table = numpy.zeros([100,100], int)
【问题讨论】:
这两个数组声明在Python中有什么区别?
table = [[0]*100]*100
table = numpy.zeros([100,100], int)
【问题讨论】:
事实上,他们没有任何共同之处。第二个是一个 numpy 二维数组。第一个没有任何用处 - 它是一个包含 100 个项目的数组,每个项目都是对 100 个零的 SINGLE 数组的引用:
table = [[0]*100]*100
table[1][0]=222
print table[0][0]
这会打印“222”!
table = numpy.zeros([100,100], int)
table[1][0]=222
print table[0][0]
这会打印“0”!
【讨论】:
好吧,第一次,第一个是危险的错误的。看到这个:
In [8]: table = [[0]*2]*10
In [9]: table
Out[9]:
[[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0]]
In [10]: table[0][1] = 5
In [11]: table
Out[11]:
[[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5],
[0, 5]]
这是因为您声明table 的方式,子列表再次重复。有关正确执行此操作的信息,请参阅 this FAQ。
【讨论】: