ary2 = Marshal.load(Marshal.dump(ary1)) を使う。 このような複製を深いコピー(deep copy)という。 ary2 = ary1.dup や ary2 = ary1.clone では、配列はコピーされても、 配列の要素が参照しているオブジェクトはコピーされない。 そのため、ary2 で破壊的なメソッドを使うと、 ary1 にもその影響が出てしまう。 このような複製を浅いコピー(shallow copy)という。 余談だが、ネタ元のRubyレシピブックでは、 shallowがshalowと間違って書かれているのを発見した。