あおきです。

  In mail "[ruby-list:30208] Re: .dup がされてないらしい ?"
    Atsushi Kanaya <todo-a2c / mizar.freemail.ne.jp> wrote:

>  金谷です。
> 
> >   eachgraph がコンテナのように見えますが、dup で deep copy して
> > ないということでは。
> 
>  コンテナというのはブロック変数、という意味でいいんですよね?

違います。eachgraph が指しているオブジェクトがコンテナだという
ことです。適当に言うと、インスタンス変数を使ってるオブジェクトは
全部コンテナです。


> これをdupすれば深いコピーができると思ったのですが
> どうも浅いコピーの方になってしまうようです。

dup は浅いコピーをするのが仕様です。そうなっている理由は、リンクが
循環している場合にうまい解決方法がない、などです。深いコピーをする
には Marshal を使って

  duplicated = Marshal.load( Marshal.dump(obj) )

とするのが定石となってます (Marshal は循環リンクも正しく扱う)。
あるいは eachgraph のレベルだけ値が保持できればいいのなら専用の
dup メソッドを書いてもいいです。
-------------------------------------------------------------------
青木峰郎