page contents

说一下Python深浅拷贝?

轩辕小不懂 发布于 2022-03-08 14:47
阅读 430
收藏 0
分类:Python开发
3238
Nen
Nen
- 程序员

对于不可变类型(字符串、数值型、布尔值):浅拷贝和深拷贝一样,对象的引用(内存地址)没有发生变化。

对于可变对象(列表、字典、集合):浅拷贝在拷贝时,只会copy一层,在内存中开辟一个空间,存放这个copy的列表。

更深的层次并没有copy,即第二层用的都是同一个内存;深拷贝时,会逐层进行拷贝,遇到可变类型,就开辟一块内存复制下来,遇到不可变类型就沿用之前的引用。

因为不可变数据修改会从新开辟新的空间,所以,深拷贝数据之间的修改都不会相互影响。

总结如下:

浅拷贝花费时间少,占用内存少,只拷贝顶层数据,拷贝效率高。

对不可变对象拷贝时,浅拷贝和深拷贝的作用是一致的,不开辟新空间,相当于赋值操作。

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

可变对象深拷贝时,会逐层进行拷贝,遇到可变类型,就开辟一块内存复制下来。

元组是个异类。元组是否为可变对象取决于元组中的元素。如果元组中每个元素以及其子孙元素都不包含可变对像,那么这个元祖就是不可变对象。如果元组的元素以及子孙元素中包含可变对象,那么元组就是可变对象。

请先 登录 后评论