主要是 copy.copy
和 copy.deepcopy
的区别
copy
import copy
a=['a','b','c','d']
a_copy=copy.copy(a)
a[0]='e'
print(a,a_copy)
[‘e’, ‘b’, ‘c’, ‘d’] [‘a’, ‘b’, ‘c’, ‘d’]
a变化后,a_copy 并不跟着变化
那如果list里面包含了子列表呢
import copy
a=['a','b',['c1','c2'],'d']
a_copy=copy.copy(a)
a[2][1]='c3'
print(a,a_copy)
[‘a’, ‘b’, [‘c1’, ‘c3’], ‘d’] [‘a’, ‘b’, [‘c1’, ‘c3’], ‘d’]
为什么结果跟着变了呢,因为copy为浅copy,只复制了第一层数据,列表里存储的子列表,打印出来是子列表,其实,在内存里,列表里只是存储了子列表的内存地址,子列表在内存里是单独存储的
浅拷贝的应用举例
# 比如两口子,共有一个账号存款
import copy
card = ['name', ['saving', 100]] # 作为一个模板
husband = copy.copy(card)
wife = copy.copy(card)
husband[0] = 'zhangsan'
wife[0] = 'fengjie'
husband[1][1] -= 20 # 丈夫取出20,还剩下80
print(husband, wife) # 两个人的账号存款同时变动
deepcopy
deepcopy可以递归地把所有数据拷贝一边。
如果数据很大,完全复制就是存储两份数据,占用内存,慎用!
import copy
a=['a','b',['c1','c2'],'d']
a_copy=copy.deepcopy(a)
a[2][1]='c3'
print(a,a_copy)
参考文献
https://docs.python.org/3/