Pythonでの付与、浅いコピー、深いコピー
1991 ワード
オブジェクトコピー:Pythonには、付与、浅いコピー、深いコピーの3種類の使用方法があります.
一、賦課
a=[1,2,3,"hello",["python","C+"]]b=a print a==b#Trueこの場合,bはaと同じであり,同じメモリを指し,bはaの別名にすぎず,参照である.aとbが同じかどうかを判断するために、Trueを返して、彼らのアドレスが同じで、内容が同じであることを示すことができます.パラメータとしてオブジェクトを含む値の割り当て操作では、新しいメモリ領域は開かれません.新しいオブジェクトの参照がコピーされているだけです.すなわち,bという名前以外にメモリオーバーヘッドはない.
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)
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つある、もし私たちがそれを修正したら、状況は違います.
三、深コピー(deep copy)
四、コピー操作に関する警告
作者:TiRan_Yangソース:CSDN原文:https://blog.csdn.net/lovelyaiq/article/details/55102518本文は博主のオリジナルの文章で、転載して博文のリンクを添付してください!
一、賦課
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本文は博主のオリジナルの文章で、転載して博文のリンクを添付してください!