博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于赋值与深浅复制
阅读量:6194 次
发布时间:2019-06-21

本文共 660 字,大约阅读时间需要 2 分钟。

赋值

在python中,赋值语句是建立对象的引用,而不是复制对象,变量就像一个指针。例如

id函数获得的是对象的内存地址,如果两个对象内存地址一样,说明这两个对象是同一个对象,id(a) == id(b)就相当于a is b。

上述例子输出结果都一样,说明alist 和blist是一样的,指向相同的内存空间,blist是alist的一个引用。

赋值操作不会开辟新的内存地址空间,只是增加一个对象引用。由于指向的是同一片地址空间修改了alist,另一个也会改变。

 

浅拷贝

浅拷贝会产生新的对象,其内容是原内容的索引

浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy方法

clist 的每个元素都与alist的元素地址相同,clist的元素是alist的元素一个引用,但是clist的地址与alist不同,他们是两个不同的对象,因此修改clist理论上不会影响alist。

dlist更新了,但是alist并未更新。

但是浅拷贝之所以被称为浅拷贝,是因为它只拷贝了一层,如果list中嵌套有list,如果修改了嵌套的list情况将不一样。

输出是一样的,这是因为,修改了外层的元素会修改他的引用,让他们指向别的地址,但是修改嵌套列表中的元素,列表地址并未发生变化指向的还是同一位置。

 

深拷贝

深拷贝是在拷贝的基础之上,把嵌套的元素也改变了,因此他的时间和空间开销都要高,修改一个对象另一个对象并不会发生变化。

 

转载于:https://www.cnblogs.com/ghming/p/8447095.html

你可能感兴趣的文章
MongoDB安全事件的一些思考
查看>>
云数据库架构演进与实践
查看>>
论学好Linux系统的超级重要性
查看>>
键盘驱动修复
查看>>
hadoop的使用
查看>>
linux的PHP扩展模块安装
查看>>
第八章、bash脚本编程(中)
查看>>
Spring Bean配置默认为单实例 pring Bean生命
查看>>
自定义标签
查看>>
div+css基础总结(二)布局后的准备
查看>>
MySQL事务
查看>>
网络安装Centos 6.6 基本NFS
查看>>
部署与管理ZooKeeper
查看>>
什么是Code Review(转)
查看>>
Linux下安装Nginx详细图解教程
查看>>
Java高级部分笔记-------泛型
查看>>
SpringBoot 整合Mybatis
查看>>
初学Android
查看>>
日志管理
查看>>
SCCM 2016 + SQL 2016 + Win 2012 R2 安装教程
查看>>