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