处理列表和字典的时候,传递引用是非常方便的方法,但是如果函数修改了传入的列表或者字典,你可能不希望这些变动影响原来的字典或者列表,python提供了copy模块下的copy函数和deepcopy函数来复制列表或者字典这样的可变值,不仅仅是复制引用
copy()函数
import copy
spam = ['a','b','c','d']
id(spam)
cheese = copy.copy(spam)
id(cheese) #两个id不一样
cheese[1] = 42
spam # ['a','b','c','d']
cheese # ['a',42,'c','d']
deepcopy()函数
import copy
spam = ['a','b','c','d',[1,2,3]]
id(spam)
cheese = copy.deepcopy(spam)
id(cheese) #此时两个id并不一样
#修改cheese的值
cheese[4][1] = 10
spam #['a','b','c','d',[1,2,3]]
cheese #['a','b','c','d',[1,10,3]]
注意:
两个函数有所区别,第一个
copy()
函数用于复制不包含列表的列表,而deepcopy()
函数用于复制包含列表的列表,此时就要用deepcopy
函数了(如其名字一样,深度复制),deepcopy函数将同时复制它们内部的列表。