タグ

ブックマーク / purigen.seesaa.net (1)

  • Rubyでディープコピー

    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でディープコピー
    ucho
    ucho 2009/11/08
    Marshalを使う
  • 1