0

4.2.5Python下字典的copy方法

Posted by 撒得一地 on 2016年2月16日 in python教程

copy方法返回一个具有相同键-值对的新字典,这个方法实现的是浅复制(shallow copy)。因为用copy方法进行复制后的值本身就是是相同的,而不是副本。比如:

>>> x = {'username':'psz','machines':['foo','bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'admin'
>>> y
{'machines': ['foo', 'bar', 'baz'], 'username': 'admin'}
>>> x
{'machines': ['foo', 'bar', 'baz'], 'username': 'psz'}
>>> y['machines'].remove('bar')
>>> y
{'machines': ['foo', 'baz'], 'username': 'admin'}
>>> x
{'machines': ['foo', 'baz'], 'username': 'psz'}

可以看到,使用copy方法,当在副本中替换值的时候,原字典不受影响。但是,如果修改了某个值(原地修改,而不是替换),原始的字典也会被改变,因为同样的值也存储在原字典中。就像上面例子中'machines'列表一样。

避免这个问题的一种方法是使用深复制(deep copy),复制其包含所有的值。可以使用copy模块的deepcopy函数来完成操作:

>>> d = {}
>>> d['names'] = ['psz','admin']
>>> c = d.copy()
>>> from copy import deepcopy
>>> dc = deepcopy(d)
>>> d['names'].append('peter')
>>> c
{'names': ['psz', 'admin', 'peter']}
>>> d
{'names': ['psz', 'admin', 'peter']}
>>> dc
{'names': ['psz', 'admin']}

标签:

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

1 + 5 = ?

网站地图|XML地图

Copyright © 2015-2018 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.