浅いコピー("shallow copy")と深いコピー("deepo copy")

Rubydupやcloneメソッドは浅いコピーです。深いコピーが必要になったときに、どうすれば簡単に実装できるか。
katsuwo's Diary - かつを日記」より。

Marshal.load(Marshal.dump(obj))

……自分では考えつきませんでした。だめだめです。
上のコードを見たときに、GoF本のPROTOTYPEパターンに書かれていたことを思い出しました。

システム内のオブジェクトがSaveオペレーションとLoadオペレーションを提供しているのであれば、それらを使って、単にオブジェクトをセーブしてすぐにロードすることでCloneオペレーションのデフォルトの実装を与えることができる。Saveオペレーションではメモリバッファにオブジェクトを格納し、Loadオペレーションではバッファ中からオブジェクトを再生成して複製を作り出す。

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(以上著者), 本位田真一, 吉田和樹(以上訳者), 「オブジェクト指向における再利用のためのデザインパターン改訂版」, p132, 1999.