Python shallow/deep 复制错误
Python shallow/deep copy error
不,这不是重复的。
我有以下 类:
-木板
-玩家
实例化播放器时,它会为该播放器创建一个新的棋盘对象。
我有一个切换当前和潜在玩家的功能:
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()
板来像这样切换,但我仍然遇到同样的问题。这是做这样的事情的根本错误方法吗?或者这种方法是否正确,我应该看看我的代码的其他地方? (我有另一种方法可以做到这一点,但我不理解为什么这种当前方法不起作用背后的理论。)
它是这样工作的,因为name是字符串,board是将被复制的class实例,但是它更深一层,所以不会被deepcopy复制。 Deepcopy 不是递归的意思。
不,这不是重复的。
我有以下 类: -木板 -玩家
实例化播放器时,它会为该播放器创建一个新的棋盘对象。
我有一个切换当前和潜在玩家的功能:
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()
板来像这样切换,但我仍然遇到同样的问题。这是做这样的事情的根本错误方法吗?或者这种方法是否正确,我应该看看我的代码的其他地方? (我有另一种方法可以做到这一点,但我不理解为什么这种当前方法不起作用背后的理论。)
它是这样工作的,因为name是字符串,board是将被复制的class实例,但是它更深一层,所以不会被deepcopy复制。 Deepcopy 不是递归的意思。