将值插入2D数组的元素

阿米屯

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

从情况1:我看到的是,在arr的第1列的每一行中添加100。这不是我所期望的。

从案例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]]
切普纳

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章