Ruby では、文字列変数を下記のように代入すると、参照を代入することになります。
つまり、s1
と s2
の参照先として、同じ文字列情報を指すようになるだけで、文字列の実体がコピーされて2つに増えているわけではありません。
s1 = 'AAA'
s2 = s1
s1
と s2
は同じ実体を指し示しているので、どちらかから文字列を操作すると、両方から見える文字列が変化することになります。
s1[0] = 'B'
s1 # => "BAA"
s2 # => "BAA"
文字列の実体をコピーして、別々の文字列情報として保持するには、dup
メソッドで文字列をコピーします。
s1 = 'AAA'
s2 = s1.dup
s1[0] = 'B'
s1 # => "AAA"
s2 # => "BAA"