Python浅/深拷贝错误

时间:2016-11-17 16:21:10

标签: python deep-copy

不,这不是重复。

我有以下课程: -板 单放机

当Player被实例化时,它会为该玩家创建一个新的棋盘对象。

我有一个能够切换当前和潜在玩家的功能:

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 :(得分:1)

它的工作原理是,因为name是字符串,board是要复制的类实例,但它更深一层,所以不会用deepcopy复制。 Deepcopy并不意味着递归。