深浅拷贝

当我们对列表进行复制一份给新的变量名的时候,一共有两种方式来进行分,分别是浅copy、深copy。那么两者有什么区别呢?都该什么时候使用呢?

一、深浅copy的原理

  • 浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表
  • 深copy(deepcopy):新列表与原列表的改操作完全独立开
拷贝后,容器类型的内存地址不同,会重新在内存中申请内存空间

1.1 浅copy的定义

 

 深拷贝

 

 

  • 浅拷贝:减少内存的使用
  • 深拷贝:以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。(相当于备份

 

 

总结:

  1. 对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表
  2. 但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变,即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受。
  3. 要想copy得到的新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy

 

posted @ 2020-03-09 18:59  清轩挽长风  阅读(119)  评论(0编辑  收藏  举报