我怎样才能克隆一个班级?

时间:2013-02-15 16:02:05

标签: python deep-copy

我有以下课程

class CommandList( HasTraits ):

    command_nr = Int    

    command_code = Int    

    command_name = Str

    status = Int       

    settings = None #It will be a list[dic{list[]}]

我是usind copy.deepcopy来克隆类

a = copy.deepcopy(b)

但是当我更改a中的设置变量时,它会影响b变量。似乎deepcopy没有克隆这个变量。我读到可以覆盖__deepcopy__函数。这是个好主意吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

这符合我记录的文件:

import copy

class Ex(object):
    clvar='foo'
    def __init__(self,i):
        self.i=i

    def __repr__(self):
        return 'clvar={}, self.i={}'.format(self.clvar,self.i)


ex1=Ex(1)
ex2=Ex(2)

excopy1=copy.deepcopy(ex1) 
excopy2=copy.deepcopy(ex2)     

print ex1,ex2   

print excopy1,excopy2

excopy1.i=22
excopy1.clvar='bar'

print ex1,excopy1

class Ex2(Ex):
    pass

ex2_2=Ex2(222)

print ex2_2    

打印:

clvar=foo, self.i=1 clvar=foo, self.i=2
clvar=foo, self.i=1 clvar=foo, self.i=2
clvar=foo, self.i=1 clvar=bar, self.i=22
clvar=foo, self.i=222

“复制”类定义的唯一方法是通过继承。您可以使用deepcopy复制实例,但最好是编写复制方法来处理实例详细信息。