深浅拷贝


面试常问之深浅拷贝

深浅拷贝

一、深浅copy

1、赋值运算

image-20220611151019511

注意:l2 = l1是一个指向,是赋值,和深浅copy无关

2、浅copy

其实列表是一个个的槽位,每一个槽位存储的是该对象的内存地址

image-20220611151229683

image-20220611151251385

小结

浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址

3、深copy

image-20220611151433932

image-20220611151450570

小结

深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

为什么Python默认的拷贝方式是浅拷贝

时间角度:浅拷贝花费时间更少。

空间角度:浅拷贝花费内存更少。

效率角度:浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

总结

不可变对象在赋值时会开辟新空间。

可变对象在赋值时,修改一个的值,另一个也会发生改变。

深、浅拷贝对不可变对象拷贝时,不开辟新空间,相当于赋值操作。

浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。

深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。

Python 有多种方式实现浅拷贝,copy模块的copy 函数 ,对象的 copy 函数 ,工厂方法,切片等。

大多数情况下,编写程序时,都是使用浅拷贝,除非有特定的需求。

浅拷贝的优点:拷贝速度快,占用空间少,拷贝效率高


文章作者: 祈安
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 祈安 !
评论
  目录