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