3

Pythonの慣習+速度の観点から、一般的に好まれるものは何ですか? 何かのようなもの:

class Object(object):
    def __init__(self, other_object=None):
        if other_object:
            self.value = other_object.value
        else:
            self.value = something

その後

obj = Object(other_object)

または、copy() を使用して:

from copy import copy
obj = copy(other_object)
4

1 に答える 1

5

copyモジュールのドキュメントを考えると、物事は非常に単純です。

クラスが独自のコピー実装を定義するために、特別なメソッド__copy__()およびを定義できます__deepcopy__()。前者は、浅いコピー操作を実装するために呼び出されます。追加の引数は渡されません。後者は、ディープ コピー操作を実装するために呼び出されます。1 つの引数、メモ ディクショナリが渡されます。__deepcopy__()実装でコンポーネントのディープ コピーを作成する必要がある場合は deepcopy()、コンポーネントを最初の引数として、メモ ディクショナリを 2 番目の引数として関数を呼び出す必要があります。

copy()したがって、標準または動作が遅い、またはその他の問題があると感じた場合はdeepcopy()、上記の方法のいずれかを実装してください。そうすれば、よく知られた Python オブジェクトのコピー メカニズムに固執しつつ、コピーしたい方法でオブジェクトをコピーできます。

于 2012-12-22T19:34:38.990 に答える