Cの浅いコピーと深いコピーとは何ですか?

質問者:Ciriaco Jobelius |最終更新日:2020年1月25日
カテゴリ:テクノロジーおよびコンピューティングプログラミング言語
4.3 / 5 (1,254ビュー。25投票)
この特定のコンテキストでの浅いコピーは、「参照」(ポインターなど)をオブジェクトにコピーすることを意味し、これらの参照またはポインターのバッキングストアは同一であり、同じメモリ位置にあるまったく同じオブジェクトです。対照的に、ディープコピーとは、オブジェクト全体(構造体)をコピーすることを意味します。

これを考えると、浅いコピーと深いコピーとは何ですか?

浅いコピーは、新しい複合オブジェクトを作成し、(可能な範囲で)元のオブジェクトで見つかったオブジェクトへの参照を挿入します。ディープコピーは、新しい複合オブジェクトを作成し、その後、元のオブジェクトで見つかったオブジェクトのコピーを再帰的に挿入します。

配列の浅いコピーとは何ですか?配列の浅いコピーは、参照型か値型かに関係なく、配列の要素のみをコピーしますが、参照が参照するオブジェクトはコピーしません。新しい配列の参照は、元の配列の参照が指すのと同じオブジェクトを指します。

ここで、IOSのシャローコピーとディープコピーとは何ですか?

オブジェクトのコピーは、浅くて深くてかまいません。深いコピーは参照されているオブジェクトを複製し、浅いコピーはそれらのオブジェクトへの参照のみを複製します。したがって、オブジェクトAが浅い場合(オブジェクトBにコピーされる場合)、オブジェクトBは、オブジェクトAが参照するのと同じインスタンス変数(またはプロパティ)を参照します。

memcpyはディープコピーですか?

memcpy ()操作は、浅いコピーの例です。 memcpy ()はオブジェクトのセマンティクスを尊重しないため、オブジェクトのコピーコンストラクターを呼び出しません。したがって、オブジェクトのコピーにmemcpy ()を使用しないでください。これは、POD(Plain Old Data)タイプ(int、浮動小数点数、およびダム構造体)をコピーする場合にのみ使用してください。

37関連する質問の回答が見つかりました

浅いコピーとは何ですか?

浅いコピーは、オブジェクトのビット単位のコピーです。元のオブジェクトの値の正確なコピーを持つ新しいオブジェクト作成されます。オブジェクトのフィールドのいずれかが他のオブジェクトへの参照である場合は、単に参照アドレスがすなわちコピーされ、唯一のメモリアドレスがコピーされます

浅い平等とは何ですか?

浅い比較は、文字列、数値などのプリミティブ型の場合は2つの値が等しいかどうかをチェックすることで機能し、オブジェクトの場合は参照をチェックするだけです。 shallowCompareは、現在のpropsオブジェクトとnextPropsオブジェクト、および現在の状態オブジェクトとnextStateオブジェクトに対して浅い等価性チェックを実行します。

コピーコピー()とコピーディープコピー()の違いは何ですか?

deepcopy()は新しいオブジェクトを作成し、元のオブジェクトを新しいオブジェクトに実際にコピーします。 deepcopy()は、元のオブジェクトを再帰的にコピーしますが、。 copy()は、元のオブジェクトの第1レベルのデータへの参照オブジェクトを作成します。したがって、のコピー/参照の違い

浅いマージとは何ですか?

浅いマージでは、最初のオブジェクトのプロパティが2番目のオブジェクトの同じプロパティ値で上書きされます。例を見てみましょう。

なぜ浅いコピーが必要なのですか?

cloneメソッドのデフォルトの実装使用する場合は常に、オブジェクトの浅いコピー取得します。これは、新しいインスタンスを作成し、オブジェクトのすべてのフィールドをその新しいインスタンスにコピーして、オブジェクトタイプとして返​​すことを意味します。これを、元のオブジェクトに明示的にキャストする必要があります。これはオブジェクトの浅いコピーです。

シャローコピーJavaとは何ですか?

浅いコピーはオブジェクトへの参照ポインタのコピーであり、深いコピーはオブジェクト自体のコピーです。 Javaでは、オブジェクトはバックグラウンドで保持されます。オブジェクトを処理するときに通常操作するのはポインターです。変数名は、オブジェクトのメモリ空間を指します。

シャローコピーC ++とは何ですか?

C ++ノート:浅いコピーと深いコピー
オブジェクトの浅いコピーは、すべてのメンバーフィールド値をコピーします。デフォルトのコピーコンストラクタと代入演算子は、浅いコピーを作成します。ディープコピーはすべてのフィールドをコピーし、フィールドが指す動的に割り当てられたメモリのコピーを作成します。

オブジェクトはディープコピーを割り当てますか?

オブジェクト割り当ては、プロトタイプのプロパティとメソッドをコピーしません。このメソッドは、ソースオブジェクトのディープコピーを作成せず、データのシャローコピーを作成します。参照または複雑なデータを含むプロパティの場合、別のオブジェクトを作成する代わりに、参照が宛先オブジェクトにコピーさます

IOSコピーとは何ですか?

コピーコピーとは、オブジェクトの状態を保証することを意味します。コピーは、copyWithZone:メソッドを呼び出します。可変オブジェクトにcopyWithZone:メッセージが送信されると、retainCountが1であるクローン不変オブジェクトが返されます。

NSCopyingとは何ですか?

NSCopying 。オブジェクトがそれ自体の機能的なコピーを提供するために採用するプロトコル。

コピーObjectiveCとは何ですか?

copyオブジェクトのコピーを作成し、保持カウント1で返します。オブジェクトコピーする場合は、そのコピーを所有します。これは、「コピー返されたオブジェクトを参照する単語のコピーが含まれている任意の方法に適用されます。保持オブジェクトの保持カウントを1つ増やします

コピーと保持の違いは何ですか?

Retainは、オブジェクトの保持カウントを1増やし、オブジェクトの所有権を取得します。コピーはメモリ位置に存在するデータをコピーして変数に割り当てるのに対し、コピーの場合は最初に場所からデータをコピーして変数に割り当て、保持カウントを増やします。

Swiftのコピーとは何ですか?

copy ()— copy (with :)によって返されたオブジェクトを返します。これは、NSCopyingプロトコルを採用するクラスにとって便利なメソッドです。コピーの実装がない場合(:)で例外が発生します。 NSCopyingプロトコルに準拠するように、Code Snippet2で作成したAddressクラスを再構築してみましょう。

Swiftでオブジェクトをどのようにコピーしますか?

copy()を使用してSwiftでオブジェクトをコピーする方法
  1. クラスをNSCopyingに準拠させます。これは厳密には必須ではありませんが、意図が明確になります。
  2. 実際のコピーが行われるメソッドcopy(with :)を実装します。
  3. オブジェクトでcopy()を呼び出します。

ディープコピーをどのように作成しますか?

ファイルを作成せずに、シリアル化を使用してディープコピー作成できます。ディープコピーするオブジェクトは、シリアライズ可能を実装する必要があります。クラスがfinalでないか、変更できない場合は、クラスを拡張してシリアライズ可能を実装します。 orgを使用して、シリアル化ベースのディープクローンを作成できます。

深いものと浅いものの違いは何ですか?

形容詞として浅いもの深いものの違い
浅いの深さがほとんどないということです;はるか下底を持つ深い(ETC |水|渓谷| |カット穴の)である広いながらより大幅に少ない深いです

Spread Operatorはディープコピーですか?

SpreadOperatorはプロパティをディープコピーしません。スプレッド演算子がオブジェクトプロパティのターゲットオブジェクトへのディープコピーを実行しないことをTILします。