私はclass Board
をいくつか持っています。その部分はnamedtuple
で表され、属性は_pieces
に格納されています。これは単なる辞書です(そのキーはボード上の位置であり、その値はピースです)。リファクタリング時に誤ってコピー/ビューのセマンティクスに陥るのを防ぎます
Board
は、の指定された矩形のコピーをボード上に戻す必要がある方法get_rectangle
を持っています。これは、適切にフィルタリングされた位置で新しい辞書を作成して返すだけで簡単に実行されます。
多くの場合、リファクタリング時には、namedtuple
からclass
に変更されます。これは困難なバグを引き起こします。get_rectangle
から返された辞書は、もはやコピーではなくなります(これは、オブジェクトをボードと共有します)。
もちろん、このバグが見つかった後、修正するのは非常に簡単です。しかし、どのような技術がこの問題を回避するために利用可能ですか?元のデザインに明らかな問題はありましたか?
もちろん、「deepcopy」はそれを解決します。しかし、オブジェクトが不変であった初期の段階では、「ディープコピー」は不必要に複雑に見えていました。私たちは通常、例えばdeepcopyを使って整数リストを作成しません。 – max