Rubyの dup は、配列オブジェクトは異なるが、
配列の中身のオブジェクトは同じものを指している。
配列のオブジェクトIDは異なる。
pp origin_arr = ["111", "000"] # => ["111", "000"]
pp dup_arr = origin_arr.dup # => ["111", "000"]
pp origin_arr.object_id # => 56320
pp dup_arr.object_id # => 65500
配列要素そのものの変更は影響を及ぼします。
pp dup_arr.first.gsub!("111", "555") # => "555"
pp origin_arr # => ["555", "000"]
pp dup_arr # => ["555", "000"]
pp origin_arr[0] << "ppp" # => "555ppp"
pp origin_arr # => ["555ppp", "000"]
pp dup_arr # => ["555ppp", "000"]
しかし、配列要素の入れ替えは、配列オブジェクトに対する操作なので影響しない。
pp dup_arr[0] = "aaa" # => "aaa"
pp origin_arr # => ["555ppp", "000"]
pp dup_arr # => ["aaa", "000"]
2024/02/09