Rubyで1階層だけDeepコピー

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:あるのか知らんが.

コメントする