Python中的深拷贝

0 投票
1 回答
3563 浏览
提问于 2025-04-17 20:03

我在使用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. 

那么我该如何创建旧棋盘的深拷贝呢?我不想共享任何引用,因为我会在本地进行修改,并且希望保持旧的棋盘不变。

1 个回答

1

你需要从Board的定义中去掉以下内容:

xpos = None
opos = None
count = None
status = []

然后在它的__init__()方法中添加以下内容:

self.status = []

否则,你创建的所有实例都会共享同一个status,这个status是属于的属性,而不是属于实例的属性。

撰写回答