【でぃーぷこぴー】
ディープコピー(深いコピー) とは?
最終更新:
💡 入れ子のデータも別にする「深いコピー」
オブジェクトや配列の内側にあるデータも複製し、コピー側の変更が元のデータに影響しないようにする方法。実際に複製できる型や情報は、使うコピー手段によって異なる。
📌 このページのポイント
いつディープコピーが必要になるの?
入れ子のデータをコピー側で変えても、元に影響させたくないときだよ。テスト用データや変更前の状態を保存する場面が例になるね。必要な部分だけを複製する方法もあるよ
structuredCloneって何?
対応する型を深くコピーする関数だよ。Date・Map・Setや循環参照にも対応するんだ。ただし関数やDOMノードなどは複製できず、DataCloneErrorになるので、どんな値でも完全にコピーできるわけではないよ
ReactやReduxの更新では毎回必要なの?
全体のディープコピーは必須ではないよ。変更する入れ子の経路だけ新しいオブジェクトにし、他の部分を共有する方法があるんだ。Redux ToolkitのImmerもこの考え方で、不要な全体コピーを避けられるよ
もっと詳しく知りたい人へ
structuredCloneでクラスの振る舞いまで複製できる?
通常のオブジェクトでは、プロトタイプやプロパティ記述子、getter/setterなどをそのまま複製するわけではありません。独自クラスの振る舞いまで含めた複製が必要なら、その型に合った方法を選んでください。関数やDOMノードも複製できないため、呼び出し前に対象の型を確認します。
まとめ:ざっくりこれだけ覚えればOK!
「ディープコピー」って出てきたら「入れ子のデータも別にするコピー」と思えばだいたいOK!
📖 おまけ:英語の意味
「deep copy」 = 深いコピー
💬 deepは「深い」という意味で、入れ子になったデータの深い階層も複製するイメージだよ