笔记-python-standard library-8.10 copy
2024-10-21 05:02:42
笔记-python-standard library-8.10 copy
1. copy
source code:Lib/copy.py
python中的赋值语句不复制对象,它创建了对象和目标之间的指向/绑定。
对于可变对象来说,有时需要一个复制体,而非引用,本模块提供了shallow copy和deep copy操作。
接口函数:
copy.copy(x) 返回一个shallow copy
copy.deepcopy(x) 返回一个deep copy
exception copy.error 抛出模块特定错误
浅复制和深复制的区别:
- 两者之间的区别主要是针对复杂对象而言的,例如列表和类实例。
- 浅复制复制对象但不复制引用体。
- 深复制复制对象,同时递归的去寻找它在原始对象的内容并复制。
深复制通常会存在两个问题,而浅复制不会:
- 递归对象可能会导致递归循环;
- 深复制可能会复制太多不必要的内容,比如应该在两个对象之间共享的内容。
针对上述问题,深拷贝通过以下方式避免:
- 保留一个“memo”字典用于描述拷贝的对象。
- 让用户定义的类覆盖掉复制操作或复制过来的组件。
1.1.1. example
import copy
la = [1, 2, 3, ['a', 'b', 'c']]
lb = la
print(id(lb) == id(la)) #True
# copy
lb = copy.copy(la)
print(id(lb) == id(la)) #False
print(id(lb[3]) == id(la[3])) #True
# deep copy
lb = copy.deepcopy(la)
print(id(lb) == id(la)) #False
print(id(lb[3]) == id(la[3])) #False
解释:
python中变量全是对象/引用,因此变量都是指向的内存区域的一个引用,判断变量指向的内存区域是否相同可以判断是否同一对象。
浅拷贝时la和lb的指向不同了,但内部的引用la[3]和lb[3]的指向仍是相同的。可见只复制了引用a[3]而没有复制引用指向的对象。
在深拷贝中a[3]和b[3]指向的内存是不一样的,可见复制了引用对象。
使用la[3] is lb[3]效果应该是一样的。
最新文章
- C#夯实基础之多线程三:线程的优先级
- 【Win 10 应用开发】Toast通知激活应用——前台&;后台
- SpringHttpInvoker解析2-服务端实现
- jQuery属性,方法操作
- 百度编辑器ueditor获取不到内容?请把form放在table等其他元素最外面
- 怎么安装phpcms?PHPCMS V9安装图文教程
- codevs 1222 信与信封问题(二分图的完美匹配)
- 第三篇:R语言数据可视化之条形图
- 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
- Server Tomcat v7.0 Server at localhost failed to start.解决方法
- Elasticsearch分片、副本与路由(shard replica routing)
- CSS3 动画 animation和@keyframes
- hibernate之实体@onetomany和@manytoone双向注解(转)
- 物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务
- Android/Linux Thermal框架分析及其Governor对比
- 取消Fragment切换时间,Fragment+ViewPager静止滑动,去掉默认的滑动效果
- html5 javascript 新增加的高级选择器更精准更实用
- ajax,分页器
- CentOS7 搭建LVS+keepalived负载均衡
- jQuery版本问题,及事件源
热门文章
- SpringMVC核心技术---转发和重定向
- C#启动或停止 计算机中“服务”
- (转载)C#中的lock关键字
- 《Python高效开发实战》实战演练——建立应用2
- 【extjs6学习笔记】1.9 初始: Mixins
- System Center Configuration Manager 2016 域准备篇(Part4)
- LeetCode Length of Last Word 最后一个字的长度
- GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除)
- JS获取本地文件并且解析文件内容(XML,TXT)
- Selenium关闭windows系统弹窗