Python學習日記之字典深復制與淺復制


Python中通過copy模塊有兩種復制(深復制與淺復制)

  1. copy 淺復制 復制時只會復制父對象,而不會復制對象的內部的子對象。
  2. 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM