测试开发实践

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

2018-05-07  本文已影响29人  严北
>>> 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}
上一篇 下一篇

猜你喜欢

热点阅读