Python中通過copy模塊有兩種復制(深復制與淺復制)
- copy 淺復制 復制時只會復制父對象,而不會復制對象的內部的子對象。
- deepcopy 深復制 復制對象及其子對象
因此,復制后對原dict的內部的子對象(方括號[]內元素)進行操作時,淺復制dict會受操作影響而變化,而深復制dict則不會受操作變化
而使用del 對父對象進行操作時,淺復制,深復制后的副本為全新副本,不受影響
1 #!/usr/bin/env python3 2 # -*- coding:utf-8 -*- 3 4 from copy import deepcopy 5 adict={'姓名':'Tom','性別':['男','女']} 6 bdict=adict.copy() #淺復制(淺拷貝) 7 cdict=deepcopy(adict) #深復制(深拷貝) 8 def travel(dict): 9 for key,value in dict.items(): 10 print('%s : %s'%(key,value)) 11 12 print('進行刪除操作') 13 adict['性別'].remove('女') 14 travel(adict) 15 print('copy淺復制(淺拷貝)') 16 travel(bdict) 17 print('deepcopy深復制(深拷貝)') 18 travel(cdict)
輸出結果:
結論:使用copy方式進行的是淺復制,故對原adict或淺復制結果bdict的子對象的操作,是等同的,且不會對深復制cdict產生影響。
對深復制cdict的操作不會對原adict有影響
擴展(深復制與淺復制對比)
淺復制:copy , [ : ],set,list...
深復制:deepcopy
開發環境: python3