Jimmy_Wang:ディープコピーとシャローコピーの類似点と相違点について話します

ディープコピーとシャローコピー

ディープコピーとシャローコピーについて説明する前に、まずトピックについて説明しましょう。データ型は変数ですか?

可変タイプ:ディープコピーとシャローコピーの間に明確な違いがあります。
不変タイプ:ディープコピーとシャローコピーの間に違いはありません。基本的にコピーはありませんが、メモリの意味でのポインタです。

次に、変数型データを前提としたディープコピーとシャローコピーの違いについて説明します。
同じ点:

  1. オブジェクトのディープコピーであるかシャローコピーであるかに関係なく、コピーが成功する限り、コピーされたオブジェクトを格納するために新しいメモリスペースが開かれます。
    違い:
  2. 浅いコピー、変数タイプのデータの浅いコピーは、変数タイプの第1レベルのオブジェクトのみをコピーし、コピーされたオブジェクトはストレージ用の新しいメモリスペースを開き、子オブジェクトはコピーされません。
  3. ディープコピーは、コンテナ内のすべての変数タイプのデータのディープコピーを作成します。つまり、変数タイプのデータのディープコピーは、オブジェクトの各レイヤーを最後の変数タイプにコピーし、各レイヤーのデータをコピーします。オブジェクトが開きます。ストレージ用の新しいメモリスペース。
  4. 変数の型のデータオブジェクトをコピーする場合、浅いコピーだけでコピーをしながら、私たちは、元のデータの他の層のデータを変更した場合ので、私たちの浅いコピーオブジェクトの内部データも変更に行われる、変数の型の第1層のオブジェクトの深いコピー元のオブジェクトデータのすべてのレベルを変更します。データは互いに独立しているため、オブジェクトデータのいずれかを変更しても、他のオブジェクトデータは影響を受けません。したがって、データセキュリティの観点から、ディープコピーはデータセキュリティに適していますが、より多くのメモリリソースを消費します
    。5。特別な状況の説明、プリミティブ型データが不変型データに属することは誰もが知っていますが、特別な状況ですが、それでも詳細に分析する必要があります。
    コード例:
    a_tup =(1、2、3、[
    4、5、6 ])b_tup = copy.copy(a_tup)
    print(a_tup)
    print (b_tup)
    print( "*" * 20)
    a_tup [-1] .append(7)
    print(a_tup)
    print(b_tup)

コードのデモンストレーション結果:
(1、2、3、[4、5、6])
(1、2、3、[4、5、6])


(1、2、3、[4、5、6、7])
(1、2、3、[4、5、6、7])

特別な状況の要約:

つまり、不変型データに可変型データがある場合は、シャローコピーでコピーしてください。シャローコピーが完了すると、オブジェクトa_tupとb_tupがあり、一方のデータを任意に変更しても、もう一方のオブジェクト内の変数型データは変更されます。したがって、データセキュリティの観点から考えると、浅いコピーを使用して対応するデータを操作するときにさまざまなオブジェクト間のデータの相互作用を回避するために、深いコピーを使用することをお勧めします。

おすすめ

転載: blog.csdn.net/qq_41475067/article/details/112541096