2015-04-05 49 views
0

我有一個問題,在下面顯示的函數中更改錯誤的變量。功能正在改變錯誤的變量

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已更改。我相信這與參考有關,但我不知道什麼。

回答

2
arr = g.matrix 

你已經做了arrg.matrix指向同一個對象。很自然地,通過任一名稱所做的更改都可以從另一個名稱中看到

我不知道什麼樣的對象g.matrix是(雖然我可以看到它不是Python列表),但可能有一種方法可以複製它並避免此問題。如果它是NumPy數組,則可以使用numpy.copy

+0

對,不知道,這樣一個基本的... g.matrix是np.matrix,所以我可以使用np.copy()。謝謝! – 2015-04-05 16:23:24