リストの浅いコピー、深いコピー

1395 ワード

import copy
list0 = [1,[2,3],4,5]
print(list0)

newlist = list0
list1 = list(list0)
list2 = list0  * 1
list3 = list0[:]
list4 = copy.copy(list0)
list5 = copy.deepcopy(list0) #     ,        
list6 = list0.copy()

list0.append(6)
list0[1].append(23)

print("    list0:\t",list0,"\t   :\t",id(list0))
print("---------")
print("=   :\t\t\t",newlist,"   :",id(newlist))
print("list()  :\t\t\t",list1,"   :",id(list1))
print("*   :\t\t\t",list2,"   :",id(list2))
print("[:]  :\t\t\t",list3,"   :",id(list3))
print("copy.copy()  :\t\t\t",list4,"   :",id(list4))
print("list0.copy()  :\t\t\t",list5,"   :",id(list5))
print("copy.deepcopy()  :\t\t\t",list6,"   :",id(list6))

結果:
元のlist 0:[1,[2,3],4,5]アドレス:2164100449736修正後のlist 0:[1,[2,3,23],4,5,6]アドレス:2164100449736----=番号方式:[1,[2,3,23],4,5,6]アドレス:2164100449736 list()方式:[1,[2,3,23],4,5,6]アドレス:2164100449736 list()方式:[1,[2,3,23],4,5.アドレス:216409026056*号方式:[1,[2,3,23],4,5]アドレス:2164100451016[:]方式:[1,[2,3,23],4,5]アドレス:2164100450952 copy.copy()方式:[1,[2,3,23],4,5]アドレス:2164100450888 copy.deepcopy()方式:[1,[2,3],4,5]アドレス:2164100450824 list 0.copy()方式:[1,[2,3,23],4,5]アドレス:2164100450696
copy.deepcopy()は、サブリスト要素を含むすべての要素に新しいメモリ空間を開く、=番号付け方式でアドレスを直接伝達し、他の方法はサブ要素に空間を開くが、サブリストは元のサブリストを指す.