Python - 一个例子解释浅复制与深复制

>>> dict1 = {'user': 1, 'num':[1,2,3], 'sub_num':{'user':1, 'num':[1,2,3]}}
>>> dict2 = dict1    # 引用
>>> dict3 = dict1.copy()    # 浅复制
>>> import copy
>>> dict4 = copy.copy(dict1)    # 浅复制(同dict3)
>>> dict5 = copy.deepcopy(dict1)    #深复制
>>> id(dict1)
140129563978568
>>> id(dict2)
140129563978568    # 只是引用, 所以内存地址与dict1相同
>>> id(dict3)
140129562994824
>>> id(dict4)
140129563021832
>>> id(dict5)
140129555598920
>>> dict1['user']=2    # 修改一级内容
>>> dict1['num'].remove(1)    # 修改二级内容
>>> dict1['sub_num']['user']=2    # 修改二级内容
>>> dict1['sub_num']['num'].remove(1)    # 修改三级内容
>>> dict1
{'num': [2, 3], 'sub_num': {'num': [2, 3], 'user': 2}, 'user': 2}
# dict2是引用源数据, 所以数据源的任何修改会对dict2产生相同结果
>>> dict2
{'num': [2, 3], 'sub_num': {'num': [2, 3], 'user': 2}, 'user': 2}
# dict3与dict4是浅复制, 因此一级内容不会随数据源的修改而修改, 但是深层的内容会随数据源的修改而改变
>>> dict3
{'num': [2, 3], 'sub_num': {'num': [2, 3], 'user': 2}, 'user': 1}
>>> dict4
{'num': [2, 3], 'sub_num': {'num': [2, 3], 'user': 2}, 'user': 1}
# dict5是深复制, 数据源的修改不会影响该数据
>>> dict5
{'num': [1, 2, 3], 'sub_num': {'num': [1, 2, 3], 'user': 1}, 'user': 1}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于工作,越发的意识到,只有在实践中不停的思考,并把自己的思考和实践相结合,去用行动去验证,去实现,如果别人不相信...
    鹿游原1314阅读 154评论 0 0
  • 最近可能膨胀了,没有道理的膨胀。以至于开车都开始有些懈怠,三天连刮三次。于是需要安静的思维。这样的下雨天,翻开尘封...
    智枪阅读 200评论 0 0
  • “我告诉你哦,妈妈的肚子里有个宝宝。” 小鱼儿——我的表侄女,小跑到我身旁,用手挡着小嘴巴在我耳边悄悄地说着这早为...
    TKJun阅读 264评论 0 5
  • 真正的心酸不是嚎啕大哭,而是无人倾诉 第一,写情绪日记。把你心酸的事,你的情绪,你的抱怨,详细地记下来,这是一个认...
    我_亦不是我阅读 399评论 0 0