深浅拷贝

1.引出

  对于可变类型的变量,如list 和 dict这两种类型,如果想要复制一份变量的话,通过变量赋值的方法,会出现修改原变量,改变被赋值的变量的值,所以需要通过切片或是copy、deepcopy方法

2.可变对象和不可变对象

  不可变对象: 一旦创建就不可修改的对象,包括字符串,元祖,数字
  可变对象:可以修改的对象,包括:列表、字典

3.切片

  • 切片应用于所有序列,包括:列表、字符串
  • 切片不能应用于字典,对字典只能使用浅拷贝copy() 或 深拷贝deepcopy() 方法

4.copy() 或 deepcopy()  既可用于序列,也可以用于字典

  • 浅拷贝:对只有一级目录的字典有效
    •   一级目录的字典 {‘k1’: v1}
  • 深拷贝:拷贝所有对象
    •   多级目录的字典 {'k1': [v1, v2]}

5.总结

  深浅拷贝都是对源对象的复制,占用不同的内存空间
  如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
  如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
  序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

posted @ 2018-08-15 09:58  运维00001  阅读(134)  评论(0编辑  收藏  举报