python浅拷贝和深拷贝
python中的数据类型分为可变类型(list,dict)和不可变类型(string,tuple,int)
不可变类型不存在深浅拷贝
可变类型的
浅拷贝:不管是多么复杂的数据结构,浅拷贝只会拷贝第一层(拷贝的时引用)
import copy list_1 = [1,2,['a','b','c'],3] list_2 = copy.copy(list_1) list_1[2][1] = 'kk' print(list_1,list_2,id(list_1[2]),id(list_2[2])) 结果: [1, 2, ['a', 'kk', 'c'], 3] [1, 2, ['a', 'kk', 'c'], 3] 1798791797576 1798791797576
深拷贝: 深拷贝会完全复制原变量的所有数据,在内存中生成一套完全一样的内容,我们对这两个变量中的一个进行任意修改都不会影响另一个变量(递归形式的拷贝)
import copy list_1 = [1,2,['a','b','c'],3] list_2 = copy.deepcopy(list_1) list_1[2][1] = 'kk' print(list_1,list_2,id(list_1[2]),id(list_2[2])) 结果: [1, 2, ['a', 'kk', 'c'], 3] [1, 2, ['a', 'b', 'c'], 3] 1582641879944 1582641878152
总结:copy和deepcopy和赋值是等价的