dup
irb(main):040:0> a = [{"tu"=>"car"}] => [{"tu"=>"car"}] irb(main):041:0> b = a.dup => [{"tu"=>"car"}] irb(main):045:0> b[0]["tu"]="hoge" => "hoge" irb(main):046:0> p a [{"tu"=>"hoge"}] => nil irb(main):047:0> p b [{"tu"=>"hoge"}] => nil
irb(main):034:0> a = [1,2,3] => [1, 2, 3] irb(main):035:0> b=a.dup => [1, 2, 3] irb(main):036:0> a[0]=100 => 100 irb(main):037:0> p a [100, 2, 3] => nil irb(main):038:0> p b [1, 2, 3] => nil
irb(main):048:0> a = 1 => 1 irb(main):050:0> b = a.dup TypeError: can't dup Fixnum from (irb):50:in `dup' from (irb):50 from :0
Fixnumのようなimmutableなオブジェクトはdupが禁止されている。(cloneも禁止)