深浅拷贝
1.引出
对于可变类型的变量,如list 和 dict这两种类型,如果想要复制一份变量的话,通过变量赋值的方法,会出现修改原变量,改变被赋值的变量的值,所以需要通过切片或是copy、deepcopy方法
2.可变对象和不可变对象
不可变对象: 一旦创建就不可修改的对象,包括字符串,元祖,数字
可变对象:可以修改的对象,包括:列表、字典
3.切片
- 切片应用于所有序列,包括:列表、字符串
- 切片不能应用于字典,对字典只能使用浅拷贝copy() 或 深拷贝deepcopy() 方法
4.copy() 或 deepcopy() 既可用于序列,也可以用于字典
- 浅拷贝:对只有一级目录的字典有效
- 一级目录的字典 {‘k1’: v1}
- 深拷贝:拷贝所有对象
- 多级目录的字典 {'k1': [v1, v2]}
5.总结
深浅拷贝都是对源对象的复制,占用不同的内存空间
如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
序列对象的切片其实是浅拷贝,即只拷贝顶级的对象