広告スペース(バナー)
💎Ruby レッスン
基本文法の基礎8
データ構造とオブジェクト指向7
構文の基本を深める9
関数とデータ構造の応用9
アルゴリズムとテストの基礎8
文字列・数値操作の応用8
実務で役立つ機能8
アルゴリズム練習問題10
レッスン 40 / 68

浅いコピーと深いコピーの違い

このレッスンでは、Rubyにおける浅いコピーと深いコピーの違いを学び、オブジェクトを複製するときの思わぬバグを防げるようになることを目標にします。「Ruby dup clone 使い方」で調べている方向けです。

浅いコピー(.dup)は「一番外側の入れ物だけ」を複製し、中の入れ子オブジェクトは元と共有したままです。深いコピーは中身まですべて複製するので、コピー先を変更しても元のデータに影響しません。

サンプルコードでは、originalというハッシュを.dupで浅くコピーしたshallowの入れ子部分(address[:city])を書き換えると、元のoriginalまで変わってしまう様子を確認しています。深いコピーにはJSONを経由する方法を使っています。

初心者がよくつまずくのが、.dupだけでは中の入れ子構造までは複製されない点です。「コピーしたはずなのに、元のデータまで書き換わってしまった」というバグの典型的な原因なので注意しましょう。

深いコピーが必要な場合はMarshalやJSONを使う方法もあり、目的に応じて選べます。状態管理を行うアプリケーションほど、この違いを理解しておくことが求められます。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではRubyを直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
元のデータを壊さずに、安全に複製できるようになります。
広告スペース(バナー)
広告スペース(記事内)