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']}