Python中通过copy模块有两种复制(深复制与浅复制)
- copy 浅复制 复制时只会复制父对象,而不会复制对象的内部的子对象。
- deepcopy 深复制 复制对象及其子对象
因此,复制后对原dict的内部的子对象(方括号[]内元素)进行操作时,浅复制dict会受操作影响而变化,而深复制dict则不会受操作变化
而使用del 对父对象进行操作时,浅复制,深复制后的副本为全新副本,不受影响
#!/usr/bin/env python3
# -*- coding:utf-8 -*- from copy import deepcopy
adict={'姓名':'Tom','性别':['男','女']}
bdict=adict.copy() #浅复制(浅拷贝)
cdict=deepcopy(adict) #深复制(深拷贝)
def travel(dict):
for key,value in dict.items():
print('%s : %s'%(key,value)) print('进行删除操作')
adict['性别'].remove('女')
travel(adict)
print('copy浅复制(浅拷贝)')
travel(bdict)
print('deepcopy深复制(深拷贝)')
travel(cdict)
输出结果:
结论:使用copy方式进行的是浅复制,故对原adict或浅复制结果bdict的子对象的操作,是等同的,且不会对深复制cdict产生影响。
对深复制cdict的操作不会对原adict有影响
扩展(深复制与浅复制对比)
浅复制:copy , [ : ],set,list...
深复制:deepcopy
开发环境: python3