やったこと
Ruby で配列コピーするときに、うまくいかない場合がありました。
Marshal を使ってコピーして解決しました。
確認環境
$ ruby -v
ruby 2.2.7p470 (2017-03-28 revision 58194) [x86_64-darwin16]
調査
test.rb
c1 = [
1, 2, 3
]
c2 = c1
c2[0] = 9999999
p c2[0]
p c1[0]
実行結果
$ ruby test.rb
9999999
9999999
どうやら変数の c1 と c2 は同じ参照を持っているようです。 違う方法でコピーすることにします。
test2.rb
c3 = [
1, 2, 3
]
c4 = Marshal.load(Marshal.dump(c3))
c3[0] = 9999999
p c3[0]
p c4[0]
実行結果
$ ruby test2.rb
9999999
1
うまくいきました。