ディープコピーとシャローコピー
ディープコピーとシャローコピーについて説明する前に、まずトピックについて説明しましょう。データ型は変数ですか?
可変タイプ:ディープコピーとシャローコピーの間に明確な違いがあります。
不変タイプ:ディープコピーとシャローコピーの間に違いはありません。基本的にコピーはありませんが、メモリの意味でのポインタです。
次に、変数型データを前提としたディープコピーとシャローコピーの違いについて説明します。
同じ点:
- オブジェクトのディープコピーであるかシャローコピーであるかに関係なく、コピーが成功する限り、コピーされたオブジェクトを格納するために新しいメモリスペースが開かれます。
違い: - 浅いコピー、変数タイプのデータの浅いコピーは、変数タイプの第1レベルのオブジェクトのみをコピーし、コピーされたオブジェクトはストレージ用の新しいメモリスペースを開き、子オブジェクトはコピーされません。
- ディープコピーは、コンテナ内のすべての変数タイプのデータのディープコピーを作成します。つまり、変数タイプのデータのディープコピーは、オブジェクトの各レイヤーを最後の変数タイプにコピーし、各レイヤーのデータをコピーします。オブジェクトが開きます。ストレージ用の新しいメモリスペース。
- 変数の型のデータオブジェクトをコピーする場合、浅いコピーだけでコピーをしながら、私たちは、元のデータの他の層のデータを変更した場合ので、私たちの浅いコピーオブジェクトの内部データも変更に行われる、変数の型の第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があり、一方のデータを任意に変更しても、もう一方のオブジェクト内の変数型データは変更されます。したがって、データセキュリティの観点から考えると、浅いコピーを使用して対応するデータを操作するときにさまざまなオブジェクト間のデータの相互作用を回避するために、深いコピーを使用することをお勧めします。