-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__関数をオーバーライドすることが可能であることを読みました。それは良い考えですか?どうやってやるの?

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 に答える