-1

我有以下课程

class CommandList( HasTraits ):

    command_nr = Int    

    command_code = Int    

    command_name = Str

    status = Int       

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

copy.deepcopy用来克隆类

a = copy.deepcopy(b)

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

4

1 回答 1

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 复制实例,但最好编写一个复制方法来处理实例详细信息。

于 2013-02-15T16:15:40.683 回答