Rubyでオブジェクト(配列)を変数に代入すると、「shallow copy(浅いコピー)」されます。 これは、C++で言う参照コピーであり、Cで言うポインタ渡しと同じ挙動です。 ◆exp. shallow copy a = [0,1,2] b = a b[1] = 3 p "a = " + a.to_s p "b = " + b.to_s 実行結果は、 "a = 032" "b = 032" となります。『"a = 012"』で無い所に注意が必要。 shallow copyなのでbを変更すると コピー元のaも変更されます。 では、bを変更しても『"a = 012"』としたい場合はどうするか。 『deep copy(深いコピー)』すれば良いのです。 deep copyを実装するのに Marshalモジュールを使います。 Rubyリファレンスマニュアル#Marshal ◆exp. deep
![Rubyでディープコピー](https://cdn-ak-scissors.b.st-hatena.com/image/square/126e9c63960837b5815901e11e1f6c1303c17f2b/height=288;version=1;width=512/https%3A%2F%2Fblog.seesaa.jp%2Fimg%2Fogp_logo.png)