2015-11-02 112 views
0

我的程序的一小部分。 A和B被認爲是不同的,但都是一樣的。 A = B即使改變後。有什麼建議麼。不正確的變量python

def reveal_board(location1, location2, a): 
    b = a 
    for char in board: 
     if char == board[location1 - 1]: 
      b[location1 - 1] = char 
     if char == board[location2 - 1]: 
      b[location2 - 1] = char 
     else: 
      b = b 
    print_board(b) 
    if board[location1 - 1] == board[location2 - 1]: 
     return b 
    else: 
     return a 
+2

什麼* *是* a?我想是個'dict' ...? – deceze

+1

什麼是'board'?嘗試創建一個顯示您感到困惑的行爲的最小示例。 – Joost

+0

板是一個列表,並且a與剛剛填充「*」的板的尺寸相同。這只是我的程序的一部分。 – Stephanie

回答

5

假設ab是一個更復雜的對象,如列表或字典,你沒有真正分配b = a當製作a副本。這僅僅使得ab都指向相同的對象。如果您然後修改b,那麼您也正在修改a,反之亦然。

如果您想複印,請考慮類似b = list(a)b = dict(a)。或者更一般地說:

import copy 
b = copy.copy(a) 

甚至

import copy 
b = copy.deepcopy(a) 

做出deep copy

+0

完美。謝謝 – Stephanie

+0

它看起來並不需要深層複製,所以最好使用'b = a [:]' –

+0

@TomKarzes爲什麼你認爲'b = a [:]'比'b =列表(a)'或'b = copy.copy(a)'?不要在這個級別進行優化。 – Joost

1

轉讓b = a不是複製a,而只是將引用複製到a引用的同一列表。要真正把它複製,替換分配:

b = a[:] 

,將創建的a「淺」副本,是比使用copy簡單和快捷。

此外,我建議擺脫自我分配b自己。這沒有意義。你可以刪除它和上面的else

else: 
    b = b