我正在使用Python深层复制尝试创建原始对象的完整副本,但深层副本似乎没有创建副本。它仍然与原始对象共享相同的引用,这是不希望的
这是代码。我有一个class Board
,我想要深度复制它的实例。
import copy
class Board:
xpos = None
opos = None
count = None
status = []
def __init__(self, size):
self.xpos=[0,0]
self.opos=[size-1,size-1]
self.count = size*size-2
for i in range(size):
tmp = ['-']*size
self.status.append(tmp)
self.status[0][0] = 'X'
self.status[size-1][size-1]= 'O'
我要调用的另一个函数中的某个地方
board=Board()
localboard=copy.deepcopy(board)
# then do modification to local board....
# but it seems the old board is also affected. This is so weird since
# I am already using deep copy.
那么如何创建旧主板的深层副本呢?我不想分享任何参考,因为我会对当地人进行修改,并希望保持旧的完整..
答案 0 :(得分:1)
您应该从Board
定义中删除以下内容:
xpos = None
opos = None
count = None
status = []
并将以下内容添加到其__init__()
:
self.status = []
否则,您的所有实例都会共享相同的status
,这是类的属性,而不是实例的属性。