2016-11-17 46 views
0

不,這不是重複的。Python淺/深度複製錯誤

我有以下類別: -board 單放機

當球員被實例化,它創造了該玩家一個新的董事會對象。

我有一個切換當前和潛在的玩家功能:

from copy import deepcopy 


switch_players(self): 
    temp_val = deepcopy(self.current_player) 
    # self.current_player = None 
    self.current_player = deepcopy(self.latent_player) 
    # self.latent_player = None 
    self.latent_player = deepcopy(temp_val) 
    temp_val = None 

當我打電話self.current_player.name也能正常工作的球員的名字,但是當我使用self.current_player.board.display,或寫微博,它引用雙方球員的相同棋盤爲

我甚至添加了代碼來創建板的deepcopy()來切換像這樣,但我仍然遇到同樣的問題。這是做這種事情的根本錯誤的方式嗎?或者這種方法是否正確,我應該看看我的代碼中的其他地方? (我有另一種方式做這個,但我不理解爲什麼這種方法不起作用的理論)

回答

1

它的工作原理是這樣的,因爲名稱是字符串,板是類實例將被複制,但是它更深一層,所以不會使用深層拷貝進行復制。深度複製不是遞歸的。

+0

您應該創建自己的複製功能。 – quantummind

+0

剛剛找到線程 - 感謝您的幫助! –