2016-12-09 4 views
0

私はclass Boardをいくつか持っています。その部分はnamedtupleで表され、属性は_piecesに格納されています。これは単なる辞書です(そのキーはボード上の位置であり、その値はピースです)。リファクタリング時に誤ってコピー/ビューのセマンティクスに陥るのを防ぎます

Boardは、の指定された矩形のコピーをボード上に戻す必要がある方法get_rectangleを持っています。これは、適切にフィルタリングされた位置で新しい辞書を作成して返すだけで簡単に実行されます。

多くの場合、リファクタリング時には、namedtupleからclassに変更されます。これは困難なバグを引き起こします。get_rectangleから返された辞書は、もはやコピーではなくなります(これは、オブジェクトをボードと共有します)。

もちろん、このバグが見つかった後、修正するのは非常に簡単です。しかし、どのような技術がこの問題を回避するために利用可能ですか?元のデザインに明らかな問題はありましたか?

答えて

0

辞書のコピーを作成すると、オブジェクト自体ではなく、オブジェクトへの参照がコピーされているように見えます。タプルは不変なので、これは元の修正の問題を回避していました。あなたはこの問題を避けるためにdeepcopyを見ましたか?

+1

もちろん、「deepcopy」はそれを解決します。しかし、オブジェクトが不変であった初期の段階では、「ディープコピー」は不必要に複雑に見えていました。私たちは通常、例えばdeepcopyを使って整数リストを作成しません。 – max

関連する問題