将值插入2D数组的元素中

时间:2016-07-02 19:37:51

标签: python

假设我使用零初始化创建了3x4的2D数组。 然后,我想在arr [0] [1]中添加100,我希望将100添加到arr [0] [1]单元格中。参见案例1和案例2:

来自案例1: 我看到的是,每个行都添加了100,其中第1列是arr。这不是我的预期。

来自案例2 结果是我所期待的。谁能帮我解释一下?

Case 1:
>>> arr = [[0]*4]*3
>>> arr
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> len(arr)
3
>>> len(arr[0])
4
>>> type(arr)
<class 'list'>

>>> arr[0] [1] = 100
>>> arr
[[0, 100, 0, 0], [0, 100, 0, 0], [0, 100, 0, 0]]



Case 2:
>>> arr = [[0]*4 for _ in range(3)]
>>> arr
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

>>> type(arr)
<class 'list'>

>>> arr[0] [1] = 100

>>> arr
[[0, 100, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

1 个答案:

答案 0 :(得分:0)

[0]*4创建一个对同一对象0的引用列表。因为整数是不可变的,所以可以;更改一个元素会将其替换为新对象。但是,[[0]*4]*3]创建一个列表,其中包含对同一个 mutable 列表对象的3个引用,其中包含4个对0的引用。正如您所见,更改一个列表的元素,显示作为所有3个参考文献的变化。

在列表推导中,为[0]*4的每个值创建一个新列表_,而不是简单地将新的引用存储到同一列表中。