dupもcloneも浅いコピー(shallow copy:シャローコピー)だそうで,深いコピー(Deep copy:ディープコピー)するにはMarshalを使った方法が一般的です.
array2 = Marshal.load(Marshal.dump(array1)); # deep copy
引用元:Rubyメモ
これだとオブジェクトを再帰的にコピーするわけですが,1階層だけDeep copyしたいときもある*1.そんなときはどうする?と思って書いてみた.
class Array def deep_copy self.map{|item| item.dup} end end array1=[[1,2,3],[4,[5,6]]] array2=array1.deep_copy
こうですか?あれ?何かが違う.
それにFixnumにはdupできんからまずい.
*1:あるのか知らんが.