函数正在更改错误的变量

Function is changing wrong variable

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

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 改变了。我相信这与引用有关,但我不知道是什么。

arr = g.matrix

您使 arrg.matrix 指的是同一个对象。很自然地,通过其中一个名称所做的更改对另一个名称是可见的。

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