10

次の例では、deepcopy が参照をコピーするだけでなく、フィールドのコピーを作成することを期待しています。ここで何が起こり、それを回避する簡単な方法はありますか?

from copy import deepcopy

class Test:
    field = [(1,2)]

t1 = Test()
t2 = deepcopy(t1)

t2.field[0]=(5,10)

print t1.field # [(1,2)] expected but [(5,10)] obtained
print t2.field # [(5,10)] expected

出力:

[(5, 10)]
[(5, 10)]
4

1 に答える 1

13

ディープ コピー (デフォルト) は、クラス レベルではなく、インスタンス レベルの属性にのみ適用されます。複数の一意の属性があることはあまり意味がありませんclass.attribute...

コードを次のように変更します。

class Test:
    def __init__(self):
        self.field = [(1,2)]
于 2013-08-21T17:48:38.917 に答える