在python中进行深度复制

deep copy in python

本问题已经有最佳答案,请猛点这里访问。

我正在使用python deep copy尝试创建原始对象的总副本,但deep copy似乎没有创建副本。它仍然与原始对象共享相同的引用,这是不需要的

这是密码。我有一个class Board,我想深入了解一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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'

在另一个函数中,我想调用

1
2
3
4
5
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.

那么,我如何才能创建一个旧板的深度副本呢?我不想分享任何参考资料,因为我将对本地的进行修改,并希望保持旧的完整。


您应该从Board定义中删除以下内容:

1
2
3
4
xpos = None
opos = None
count = None
status = []

并在其EDOCX1[1]中添加以下内容:

1
self.status = []

否则,您的所有实例都共享同一个status,这是类的属性,而不是实例的属性。