一、拷贝
在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表和字典,你可能不希望这些变量影响原来的列表或字典。python提供了名为copy的模块,其中包含了copy()和deepcopy()函数。
- copy.copy()
>>> import copy >>> spam = ["a","b","c","d"] >>> cheese = copy.copy(spam) >>> cheese[1]=42 >>> spam ['a', 'b', 'c', 'd'] >>> cheese ['a', 42, 'c', 'd']
通过copy()函数,将spam和cheese变量指向独立的列表。
- copy.deepcopy()
>>> import copy >>> List1 = ['1', '2', 3, 'a', ['b', 'c']] >>> List2 = List1 # 将List1赋给List2,相当于list2与list1指向同一块地址空间,list1里面内容发生,list2内容也会跟着发生改变 >>> List3 = copy.copy(List1) # 浅拷贝,只拷贝深拷贝的第一层(父对象) >>> List4 = copy.deepcopy(List1) # 深拷贝,从上到底全部对象内容拷贝 >>> List1.append('test') # 在List1末尾添加'test' >>> List1[4].append('d') # 在List1中['b','c']的末尾添加'd' >>> print('List1:%s' % List1) List1:['1', '2', 3, 'a', ['b', 'c', 'd'], 'test'] >>> print('List2:%s' % List2) List2:['1', '2', 3, 'a', ['b', 'c', 'd'], 'test'] >>> print('List3:%s' % List3) List3:['1', '2', 3, 'a', ['b', 'c', 'd']] >>> print('List4:%s' % List4) List4:['1', '2', 3, 'a', ['b', 'c']]
Tips:
如果要复制的列表中包含了列表,那就使用copy.deepcopy()函数来代替。