python学习之深浅拷贝
深浅拷贝
浅拷贝:
1、针对的是可变数据类型:list、dict、set ,不可变数据类型int、str、tuple、bool 是没有拷贝一说的,他们都没copy() 方法
2、浅拷贝后是在内存地址中分配了一份新的地址,且浅拷贝只拷贝了第一层,第二层不会拷贝,故第二层如果改变,原数据及浅拷贝后的数据也将改变
3、= 赋值不是浅拷贝,[:] 切片是浅拷贝
a = [11,22,[11,22]]
b = a
注:以上称为赋值,只是将a,b都指向了同一个内存地址
a.append(33)
print(b)
>>> [11,22,[11,22],33] 还是一起改变,b和a都是列表的内存地址的两个别名
c = a.copy() 用方法copy是浅拷贝,id(a) 与 id(c) 的内存地址是不同的
3、切片是浅拷贝
1 lis = [11,22,[11,22]] 2 qie = lis[:] 3 lis[2].append(33) 4 print(lis,qie) # [11, 22, [11, 22, 33]] [11, 22, [11, 22, 33]] 5 print(id(lis),id(qie)) # 1482689615624 1482689615752
深拷贝:
就是将原文件内部元素完全拷贝,不会将因为第二层元素改变,另一个也会改变
深拷贝方法:
import copy
list_new = copy.deepcopy()
人生苦短,我用python!