函数正在更改错误的变量
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
您使 arr
和 g.matrix
指的是同一个对象。很自然地,通过其中一个名称所做的更改对另一个名称是可见的。
我不知道 g.matrix
是什么类型的对象(虽然我可以看到它不是 Python 列表)但是可能有一种方法可以复制它并避免这个问题。如果是 NumPy 数组,可以使用 numpy.copy
.
我遇到了一个问题,在下面显示的函数中更改了错误的变量。
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
您使 arr
和 g.matrix
指的是同一个对象。很自然地,通过其中一个名称所做的更改对另一个名称是可见的。
我不知道 g.matrix
是什么类型的对象(虽然我可以看到它不是 Python 列表)但是可能有一种方法可以复制它并避免这个问题。如果是 NumPy 数组,可以使用 numpy.copy
.