配列を要素を含めて全てコピーする

ary2 = Marshal.load(Marshal.dump(ary1))

を使う。
このような複製を深いコピー(deep copy)という。

ary2 = ary1.dup

ary2 = ary1.clone

では、配列はコピーされても、
配列の要素が参照しているオブジェクトはコピーされない。
そのため、ary2 で破壊的なメソッドを使うと、
ary1 にもその影響が出てしまう。
このような複製を浅いコピー(shallow copy)という。


余談だが、ネタ元のRubyレシピブックでは、
shallowがshalowと間違って書かれているのを発見した。