功能正在改变错误的变量

时间:2015-04-05 16:10:55

标签: python python-3.x reference

我遇到了一个问题,它改变了下面显示的函数中的错误变量。

def no_updown() -> int:
    print(g.matrix)
    count = 0
    arr = g.matrix
    arr = g.move_elements(arr)
    for x in range(g.size):
        for y in range(g.size - 1):
            if arr[y, x] == arr[y + 1, x] and arr[y, x] > 0:
                arr[y, x] *= 2
                arr[y + 1, x] = 0
                count += 1
    return count

这是 g.move_elements

def move_elements(self, arr) -> np.matrix:
    for x in range(self.size):
        temp = 0
        for y in range(self.size):
            if not arr[y, x] == 0:
                arr[temp, x] = arr[y, x]
                if not temp == y:
                    arr[y, x] = 0
                temp += 1
    return arr

我想只在 no_updown() arr 上操作。相反,我得到的是 g.matrix 已更改。我相信这与引用有关,但我不能悄悄地知道什么。

1 个答案:

答案 0 :(得分:2)

arr = g.matrix

您已将arrg.matrix引用到同一个对象。很自然地,通过任一名称进行的更改都可以从另一个名称中看到。

我不知道对象g.matrix是什么类型的(尽管我可以看到它不是Python列表)但是可能有一种方法可以复制它并避免这个问题。如果它是NumPy数组,则可以使用numpy.copy