当我们对列表进行复制一份给新的变量名的时候,一共有两种方式来进行分,分别是浅copy、深copy。那么两者有什么区别呢?都该什么时候使用呢?
一、深浅copy的原理
-
浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表
- 深copy(deepcopy):新列表与原列表的改操作完全独立开
拷贝后,容器类型的内存地址不同,会重新在内存中申请内存空间
1.1 浅copy的定义
深拷贝
- 浅拷贝:减少内存的使用
- 深拷贝:以后在做数据的清洗、修改或者入库的时候,对原数据进行复制一份,以防数据修改之后,找不到原数据。(相当于备份)
总结:
- 对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表
- 但对于可变类型,我们可以改变可变类型中包含的值,但内存地址不变,即原列表的索引指向仍然指向原来的内存地址,于是新列表也跟着一起受。
- 要想copy得到的新列表与原列表的改操作完全独立开,必须有一种可以区分开可变类型与不可变类型的copy机制,这就是深copy