rubyにおける変数と代入のメモリの様子について
Rubyの変数と代入演算は、メモリについてどのような扱いになっているのでしょうか。2点ほど疑問電があります。
1点目:代入演算は変数にアドレスを渡しているのか
RubyLifeのRuby入門のサンプルをみて学習していたところ疑問がわきました。
http://www.rubylife.jp/ini/var/index4.html を参照しながら示します。
str1 = "Tokyo"
str2 = str1
str1 << ",Japan"
とやるとstr1もstr2も"Tokyo,Japan"となることから、rubyでの代入演算はアドレスを代入してると考えました。
2点目:新しくオブジェクトを代入すると別メモリ領域において、そのアドレスを代入しているのか
str1 = "Tokyo"
str2 = str1
str1 = "Osaka"
とやると、str1は"Osaka"、str2は"Tokyo"となります。
前述の参照渡と考えるとstr2も"Osaka"となっているはずですが違いました。
ここで解説に(引用はじめ)
なお2つの変数が同じオブジェクトを指し示した後で、どちらかのオブジェクトに新しいオブジェクトを
代入した場合は、代入された変数が指し示すオブジェクトだけが変更されるだけです。(引用おわり)
とあります。
このことをふまえると、新しいオブジェクトを変数に代入するというのは、別のメモリ領域をつくってデータを置いてから、そのアドレスを変数に代入している、と考えました。
これら2つの考えと実際の仕組みは一致しているのでしょうか、と言うのが質問です。
質問点をまとめると、Rubyにおいて変数に対して
・代入演算はアドレスを代入しているのか(Cでいうポインタの扱いなのか)
・新しいオブジェクトを代入するときには、新メモリ領域を作ってデータを入れてそのアドレスを代入しているのか
という点です。
ついこの間はじめたばかりの初心者ですが、どうかご教授よろしくお願いいたします。