Pythonでの付与、浅いコピー、深いコピー

1991 ワード

オブジェクトコピー:Pythonには、付与、浅いコピー、深いコピーの3種類の使用方法があります.
一、賦課
     python ,              ,   C++  。  :        

a=[1,2,3,"hello",["python","C+"]]b=a print a==b#Trueこの場合,bはaと同じであり,同じメモリを指し,bはaの別名にすぎず,参照である.aとbが同じかどうかを判断するために、Trueを返して、彼らのアドレスが同じで、内容が同じであることを示すことができます.パラメータとしてオブジェクトを含む値の割り当て操作では、新しいメモリ領域は開かれません.新しいオブジェクトの参照がコピーされているだけです.すなわち,bという名前以外にメモリオーバーヘッドはない.
       a,    b;  ,   b    a。

a=[1,2,3,“hello”,[“python”,“C+”]]b=a b.append(“ADD”)print“a=”,a,“b=”,b#a=[1,2,3,‘hello’,[‘python’,[‘C+’],‘ADD’]b=[1,2,3,‘hello’,[‘python’,‘C+’,‘ADD’]二,浅いコピー(shallow copy)
             ,          。

            :    ,    ,copy    copy  。     a:        

    1、    :b = a[:]      b = [each for each in a]

    2、    :b = list(a)

    3、copy  :b = copy.copy(a)

          b   a ,  is             ,  id  ,             。        id(x) for x in a   id(x) for x in b  ,                  。

          ,a b      ,  b       a。  b.append([4,5])。

a=[1,2,3,[hello],[python],[C++]]]b=a[:]b.append("ADD")print"a",a,"b",[1,2,3,‘hello’,[python’,‘C+’]]b[1,2,3,‘hello’,[python’,‘python’,‘C+’,‘ADD']しかし、浅いコピーが浅いコピーと呼ばれるのは、浅いコピーと呼ばれるのは、1層だけコピーされ、aの中にネストされたlistリストtリストtが1つだけコピーされているため、aの中にネストされたlistリストtが1つある、もし私たちがそれを修正したら、状況は違います.
    a[4].append("C")。  b,    b      。    ,       list。      ,       ,         ,          ,           ,          。

三、深コピー(deep copy)
             ,copy    deepcopy  。

          ,             ,         。  ,           。

       la,   b = copy.deepcopy(a),   b      a 。              ,         ,                     ,             。

四、コピー操作に関する警告
    1、       ,   ,  ,    “  ”  ,      。           。

    2、               ,        ,        。

作者:TiRan_Yangソース:CSDN原文:https://blog.csdn.net/lovelyaiq/article/details/55102518本文は博主のオリジナルの文章で、転載して博文のリンクを添付してください!