我遇到了一个问题,它改变了下面显示的函数中的错误变量。
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 已更改。我相信这与引用有关,但我不能悄悄地知道什么。
答案 0 :(得分:2)
arr = g.matrix
您已将arr
和g.matrix
引用到同一个对象。很自然地,通过任一名称进行的更改都可以从另一个名称中看到。
我不知道对象g.matrix
是什么类型的(尽管我可以看到它不是Python列表)但是可能有一种方法可以复制它并避免这个问题。如果它是NumPy数组,则可以使用numpy.copy
。