Pythonのday07--コピー深入門

コピー深さ

  • 直接割り当て:実際には、参照されるオブジェクト

    a = [1,2,3]
    b = a
    print(a, b) # [1,2,3] [1,2,3]
    print(id(a),id(b)) # 4497919088 4497919088
    a = 5
    print(a, b) # 5 5
    print(id(a),id(b)) # 4498367856 4498367856

    B =割当参照、およびbは同じオブジェクトです。

  • 浅いコピー(コピー):親オブジェクト内のコピーの子オブジェクトは、オブジェクトがコピーされません。

a = {1:[1,2,3]}

b = a.copy()

a[2] = a.pop(1)

a[2].append(4)

print(a,b) # [2,[1, 2, 3, 4]], [1: [1, 2, 3, 4]]

B = a.copy():浅いコピーは、aおよびbは、独立したオブジェクト、サブオブジェクトであり、またはそれらは、統一されたオブジェクト(リファレンス)を指します。

  • ディープコピー(deepcopy):deepcopyメソッドのコピーモジュール、親オブジェクトと子オブジェクトの完全なコピー。

コピーモジュールのコピーを導入するために必要な深さ:

import copy 

a = {1:[1,2,3]}

c = copy.deepcopy(a) 

a[2].append(5) 

print(a,c) # a, c ({2: [1, 2, 3, 5]}, {1: [1, 2, 4]})

シャローコピー:

シャローコピーを言うことである、新しいオブジェクトのうちアドレスと元のオブジェクトのコピーが同じではありませんが、(このようなリスト、辞書など)の可変要素の内部アドレスと新しいオブジェクトの変数要素の元のオブジェクトのアドレスが同じですそれは、データ構造の浅いコピー(不変要素)、新しいアドレスにコピーされた可変要素内のオブジェクトとされていないに深いデータ構造が、可変で同じ要素に元のオブジェクトと点アドレスので、変更を行う場合、両方のオブジェクトが同時に変更され、この可変要素の元のオブジェクトまたは新しいオブジェクト。

ディープコピー:

不変のため、元のメモリアドレスに(省スペース化、変更のための戦いを行うことができない、それは新しいメモリ空間を開放する必要があります)。

変数のために、新しいアドレスアップ容器の開口部を与えるために(新しいコンテナタイプは、元のを取得する不変同じ共有メモリ・アドレスである場合、変数は、新しいコンテナのメモリ空間を開放しなければならない場合、変数不変タイプを区別する必要がありますなど)。

変数のデータ・タイプのために、次にメモリを開き、直接コピーする不変データ・タイプのメモリアドレス、ディープコピーが可変不変のデータ・タイプを区別することです

おすすめ

転載: www.cnblogs.com/yding/p/12450901.html