更改多维列表中的值时出现异常行为

时间:2019-02-25 20:08:58

标签: python list recursion multidimensional-array

我使用以下函数创建形状为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和字符串是不可变的,因此我仍然不明白为什么会出现这种情况。

0 个答案:

没有答案