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和赋值是等价的

posted @ 2019-03-03 16:46  Xcsg  Views(163)  Comments(0Edit  收藏  举报