Rubyの変数の考え方は、オブジェクト自体ではなく、オブジェクトの参照です。
変数に値を代入するときは、代入先の変数の中にオブジェクトをコピーするのではなく、変数にオブジェクトの参照を格納しています。
Stringオブジェクトを作り、参照を s に格納します。
参照のコピーを作って t に格納すると、 s と t は同じオブジェクトを参照します。
s = "Ruby"
t = s # => "Ruby"
t に格納された参照を介してオブジェクトを一部書き換えます。
t と s は同じオブジェクトを参照しているので、結果は同じになります。
t[-1] = "r"
puts t # => Rubr
puts s # => Rubr
t 自体に別のStringオブジェクトを代入すると、sとは別のオブジェクトを参照することになります。
t = "Python"
puts s # => Rubr
puts t # => Python
s[0] = 'g'
puts s # => gubr
puts t # => Python
ちなみに、Rubyのメソッドの引数は、値渡しで参照を渡しています。
2025/01/01