Rubyで次の懸念に遭遇しました
a = [1, 2, 3]
b = a
b.delete_at(1)
b => [1,3]
a => [1,3]
b.object_id => 70178446287080
a.object_id => 70178446287080
だから、私はこれについてある程度理解しています。a
で配列への参照を保持しますobject_id
。
b
b
は、その を参照するポイントとしてa
、その同じ位置への参照も持っていobject_id
ます。基本的には同じものを指します。したがって、何かを変更するとb
、a
も変更されます。
この動作はどのカテゴリに分類されますか? これに関連して将来エラーが発生しないように、記憶できる読み物/一般的な慣行はありますか? 私はそれa.dup
が別の場所に新しいオブジェクトを提供することを知っているa.dup == b
のでtrue
. にもa.dup.object_id == b.object_id
。
また、浅い対深いに関係なく、この状況では本質的に同じことですかdup
?clone