声明二维数组的方法的差异

时间:2015-04-04 01:23:00

标签: python arrays

在python中声明一个2D数组有两种方法, 第一个是

matrix = [[0.0 for x in range(20)] for x in range(41)] 

第二是,

matrix = [[0.0] * 20] * 41

第一个声明工作正常,但第二个声明产生了不必要的引用。这怎么可能?

1 个答案:

答案 0 :(得分:1)

在第二种情况下,外部列表的元素本身就是列表,即可变对象。在Python中,可变对象通过引用分配(并因此被复制),因此外部列表的所有41个元素都是相同的,并引用相同的内部列表。

内部列表的元素是浮点数,这些(作为其他不可变对象)按值复制并按预期运行。