2

によってディープコピーされない属性のリストを提供できるクラスを作成したいと思いますcopy.deepcopy()。たとえば、次のようにします。

class CustomDeepcopy(object):

    a = SomeSimpleObject()
    b = SomeBigObject()

    def dont_deepcopy(self):
        return ['b']

    def __deepcopy__(self,memo):
        #Somehow call copy.deepcopy(self) and have it  
        #deepcopy self.a but not self.b
        #
        #For example, this *almost* works, 
        for attr in self.dont_deepcopy():
            val = getattr(self,attr,None)
            if val is not None:
                 memo[id(val)]=val
        return copy.deepcopy(self,memo)

問題は、無限再帰につながるため、内部から呼び出すことができないと思うことです (copy.deepcopy()オブジェクトにメソッドがあるかどうかを最初に確認するため)。これを行う方法はありますか?__deepcopy__()copy.deepcopy()__deepcopy__()

4

2 に答える 2