配列を =
演算子で別の変数に代入しても、参照がコピーされるだけなので、新しい配列オブジェクトは作成されません。
下記の例で、変数 a
と b
は同じものを指していることが分かります。
a = [1, 2, 3]
b = a
b[0] = 'modified'
p a # => ["modified", 2, 3]
p b # => ["modified", 2, 3]
配列の要素そのものをコピーして新しい配列を作成するには、Array#dup()
を使用します。
a = [1, 2, 3]
b = a.dup
b[0] = 'AAA'
p a # => [1, 2, 3]
p b # => ["AAA", 2, 3]