Python高级编程-深拷贝与浅拷贝
来源:互联网 发布:淘宝网服务中心 编辑:程序博客网 时间:2024/06/05 16:19
1. ==,is的使用
总结:
• is 是比较两个引用是否指向了同一个对象(引用比较)。
• == 是比较两个对象是否相等。
2. 浅拷贝、深拷贝
python中的深拷贝和浅拷贝和java里面的概念是一样的,所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝。
首先,对赋值操作我们要有以下认识:
1.赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。
2.修改不可变对象(str、tuple)需要开辟新的空间
3.修改可变对象(list等)不需要开辟新的空间
2.1浅拷贝
浅拷贝是对于一个对象的顶层拷贝,仅仅复制了容器中元素的地址
通俗的理解是:拷贝了引用,并没有拷贝内容
总结:
浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。
2.2 深拷贝
深拷贝是对于一个对象所有层次的拷贝(递归),完全拷贝了一个副本,容器内部元素地址都不一样
总结:
深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。也就是说( 新瓶装新酒 )。
2.3 拷贝的其他方式
浅拷贝对不可变类型和可变类型的copy不同
●对于列表[]来说:
import copya = [11,22,33]b = copy.copy(a)print(b)print(id(a),id(b))a.append(44)print(a)print(b)
运行结果:
●对于元组()来说:
import copya = (11,22,33)b = copy.copy(a)print(b)print(id(a),id(b))
运行结果:
对字典{}来说:
a=dict(name="zhangsan",age=27)b=a.copy()print(b)print(id(a),id(b))
运行结果:
• 分片表达式可以赋值一个序列
a='abc'b=a[:]print(b)#b='abc'
• 有些内置函数可以生成拷贝(list)
a = list(range(10))b = list(a)print(a)print(b)print(id(a),id(b))
运行结果:
阅读全文
0 0
- Python高级编程-深拷贝与浅拷贝
- Python 高级教程之深拷贝与浅拷贝
- Python的浅拷贝与深拷贝
- python/c++ 深拷贝与浅拷贝
- Python 深拷贝与浅拷贝
- Python中的浅拷贝与深拷贝
- python 浅拷贝与深拷贝
- Python的深拷贝与浅拷贝
- Python中深拷贝与浅拷贝
- python append()与深拷贝、浅拷贝
- python浅拷贝与深拷贝
- Python 的深拷贝与浅拷贝
- python中的深拷贝与浅拷贝
- Python:深拷贝与浅拷贝
- python 赋值、浅拷贝与深拷贝
- [Python]浅拷贝与深拷贝
- Python浅拷贝与深拷贝
- Python中的浅拷贝与深拷贝
- 软件姿态解算
- Kotlin学习篇(1)
- Android_布局
- PHP培训多少钱
- SpringMVC处理请求流程
- Python高级编程-深拷贝与浅拷贝
- Java中关于返回引用可变对象常见问题剖析
- 遇见JSP
- ACM:L: 素数槽
- JAVA SE
- 安卓布局
- 知乎爬虫---总结我的Java课程设计
- 欢迎使用markdown
- [Java]String、StringBuilder和StringBuffer