我使用以下函数创建形状为dimension
的多维列表:
def create(dimensions, elem):
res = elem
for i in dimensions[::-1]:
res = [copyhelp(res) for _ in range(i)]
return res.copy()
def copyhelp(r): #when res begins as elem, it has no .copy() function
if isinstance(r,list):
return r.copy()
return r
所以,如果我说mylist = create([3,3,2],0)
,我会得到
>> mylist
[[[0, 0], [0, 0], [0, 0]],
[[0, 0], [0, 0], [0, 0]],
[[0, 0], [0, 0], [0, 0]]]
太好了。现在,我使用此函数将列表index
的索引处的值更改为v
:
def replacor(array, index, v):
if not isinstance(array[0],list):
array[index[0]] = v
else:
return replacor(array[index[0]], index[1:], v)
现在,当我做replacor(mylist, [1,2,0], '.')
时,我得到了:
>> mylist
[[['.', 0], [0, 0], [0, 0]],
[['.', 0], [0, 0], [0, 0]],
[['.', 0], [0, 0], [0, 0]]]
我怀疑它与数组指针有关,但是我在每一步都使用了copy()
,所以我不确定哪里出了问题。显然,问题是我定义第一个列表的方式,但是由于int,bool和字符串是不可变的,因此我仍然不明白为什么会出现这种情况。