当我用None
元素创建多维数组时,我有一个疑问,即
所有元素都具有相同的ID,但仅更改了一行中的元素。
def array(a, b):
none = [None for _ in range(b)]
return [none for _ in range (a)]
所以现在
arr = array(4, 5)
给[[无,无,无,无,无],[无,无,无,无,无],
[无,无,无,无,无],[无,无,无,无,无]]
现在当我做
arr[0][4] = 45
[[无,无,无,无,45],
[无,无,无,无,45],
[无,无,无,无,45],
[无,无,无,无,45]]
每4个索引值更改为45
所以我尝试了
def id_array(a, b):
none = [id(None) for _ in range(b)]
return [none for _ in range (a)]
现在
id_arr = id_array(4, 5)
[[138022184、138022184、138022184、138022184、138022184],[138022184,
138022184、138022184、138022184、138022184],[138022184、138022184,
138022184、138022184、138022184],[138022184、138022184、138022184,
138022184,138022184]]
即每个值都具有相同的
id
,因此在执行arr[0][4] = 45
时不应将arr的每个值都更改为45,因为每个人都具有相同的id
以及为什么只更改每行的第4个索引。 最佳答案
当您希望每个元素都与众不同时,您将对添加到返回值的每个元素重复使用相同的none
列表。这就是为什么通过一个索引对none
进行更新会反映在所有其他索引上的原因-因为您仅编辑单个列表,即使您可能对其有多个引用。
纠正此行为的方法是将第一个理解放在第二个内部:
def array(a, b):
return [[None for _ in range(b)] for _ in range (a)]