了解Python字典的copy

来源:互联网 发布:惠众金融网络借贷 编辑:程序博客网 时间:2024/05/18 03:18

先看代码:

    src = {'1':'a','2':'b','3':[11,22,33,44]}  

    des = src.copy()
    des_deep = copy.deepcopy(src) 
  

    src['3'].append(55)

    src['4'] = "add_4"

    print "src=",src
    print "des=",des
    print des_deep

 result:   

src= {'1': 'a', '3': [11, 22, 33, 44, 55], '2': 'b', '4': 'add_4'}

des=         {'1': 'a', '3': [11, 22, 33, 44, 55], '2': 'b'}
des_deep {'1': 'a', '3': [11, 22, 33, 44], '2': 'b'}

从上面的结果可以看到,des_deep未被改变,而des受src['3'].append(55)得影响却未受src['4'] = "add_4"的影响。

道理很简单:

1. copy.copy 浅拷贝, 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝, 拷贝对象及其子对象

可以看到src['3']是个子对象,所以会影响到他的浅复制产物。

如果进行id(src['3']),id(des['3']),id(des_deep['3'])可以看到,前两者的id是相同的,第三个与前两个不同。

0 0