【问题标题】:deep copy in python [duplicate]python中的深拷贝[重复]
【发布时间】:2013-03-23 15:47:39
【问题描述】:

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

那么如何创建旧版的深层副本?我不想分享任何参考,因为我会在本地进行修改并希望保持旧的完整..

【问题讨论】:

  • 这与 deepcopy 以及您为班级提供的可变类属性无关。
  • 非常感谢,这正是我要找的!

标签: python python-2.7 deep-copy


【解决方案1】:

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

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

并将以下内容添加到其__init__()

self.status = []

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

【讨论】:

  • 非常感谢,我认为是我搞砸了实例变量和类变量
猜你喜欢
  • 2017-10-14
  • 2011-02-09
  • 1970-01-01
  • 2016-05-07
  • 2015-01-13
  • 2011-03-24
  • 2013-03-12
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多