Python 标准类库-数据类型之copy-深拷贝浅拷贝操作
标准类库-数据类型之copy-深拷贝浅拷贝操作
by:授客 QQ:1033553122
Python中赋值并不会拷贝对象,只是创建目标和对象的绑定关系。
copy.copy(x)
返回x的浅拷贝
copy.deepcopy(x)
返回x的深拷贝
exception copy.error
抛出模块指定的错误
例子
>>> import copy
>>> lista = [["hi", "shouke"], 2018]
>>> listb = copy.copy(lista)
>>> id(lista), id(listb)
(40713288, 51361160)
>>> for item in lista:
... print(id(item))
...
51361032
3944400
>>> for item in listb:
... print(id(item))
...
51361032
3944400
如上,浅拷贝,拷贝的对象及被拷贝对象(例中分别为listb, lista)的id都不一样,但是两者所拥有的元素对象的id值是一样的
对比试验
>>> listb = copy.deepcopy(lista)
>>> for item in listb:
...
print(id(item))
...
51300488
3944400
如上,深拷贝,拷贝的对象及被拷贝对象(例中分别为listb, lista)的id都不一样,两者所拥有的元素对象的id值:
1)如果是不可变对象,比如例中的整数,两者的id一样
2)如果是可变对象,比如例子中的列表(["hi",
"shouke"]),则两者的id值不一样。
修改被拷贝对象的元素对象
>>> lista[0].append('nihao')
>>> lista
[['hi', 'shouke', 'nihao'], 2018]
>>> listb
[['hi', 'shouke'], 2018]
如上,深拷贝,拷贝的对象及被拷贝对象两者互不影响
对比试验
>>> listb = copy.copy(lista)
>>> lista[0].remove('nihao')
>>> lista
[['hi', 'shouke'], 2018]
>>> listb
[['hi', 'shouke'], 2018]
>>> lista[0].append('nihao')
>>> lista
[['hi', 'shouke', 'nihao'], 2018]
>>> listb
[['hi', 'shouke', 'nihao'], 2018]
如上,类似c语言,浅拷贝,被拷贝对象拥有可变元素对象时,拷贝的对象及被拷贝对象两者会相互影响
Python 标准类库-数据类型之copy-深拷贝浅拷贝操作的更多相关文章
- python 标准类库-数据类型之集合-容器数据类型
标准类库-数据类型之集合-容器数据类型 by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...
- JS Object Deep Copy & 深拷贝 & 浅拷贝
JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...
- Python深复制浅复制or深拷贝浅拷贝
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...
- python 标准类库-并行执行之subprocess-子进程管理
标准类库-并行执行之subprocess-子进程管理 by:授客QQ:1033553122 1.使用subprocess模块 以下函数是调用子进程的推荐方法,所有使用场景它们都能处理.也可用Popen ...
- python: 序列化/反序列化及对象的深拷贝/浅拷贝
一.序列化/反序列化 python中内置了很多序列化/反序列化的方式,最常用的有json.pickle.marshal这三种,示例用法如下: import json import pickle imp ...
- python集合增删改查,深拷贝浅拷贝
集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...
- Python 标准类库- 因特网协议于支持之UUID
标准类库- 因特网协议于支持之UUID by:授客 QQ:1033553122 测试环境 python3 UUID生成函数定义 uuid.getnode() 获取一个表示硬件地址的48位正整数.第 ...
- Python 标准类库 - 因特网协议与支持之socketserver
标准类库 - 因特网协议与支持之socketserver by:授客 QQ:1033553122 socketserver 模块,简化网络服务编写任务. 创建服务的步骤 1 通过子类化BaseReq ...
- Python 标准类库-Windows特殊服务之msvcrt
标准类库-Windows特殊服务之msvcrt by:授客 QQ:1033553122 广告:出售自研自动化小平台(无需编码也可用),有需要请联系 测试环境 win7 64位 Python 3.4 ...
随机推荐
- python学习的准备工作
1.python安装 1.下载: https://www.python.org/downloads/windows/ 2.安装: 安装很简单,就是下一步,只是在最后要勾选上 Add Python 3. ...
- DedeCMS上传视频
DedeCMS建站方便快捷,但是在上传视频时会出现问题,主要是文件格式与大小限制,需要修改配置文件,修改的地方主要有: 1.修改 DedeCMS系统配置参数--附件设置--允许的多媒体软件类型(以MP ...
- iReport 5.6.0 PDF导出中文不显示问题 解决方案
问题描述 iReport 5.6.0 PDF格式导出,中文不显示. 报错信息如下: Error exporting print... Could not load the following font ...
- strace命令用法
-tt 在每行输出的前面,显示毫秒级别的时间 -T 显示每次系统调用所花费的时间 -v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来. -f 跟踪目标进程,以及目标进程创建的所有子进程 ...
- web认证
前言: HTTP是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来.即无法实现状态管理,我们使用Cookie来管理Session(会话),以弥补HTTP协议中不存在的状态管理功能. 步骤: ...
- yum源配置
我这里使用的centos7操作系统. 下载地址是:https://www.centos.org/download/ yum仓库的创建可以参考: http://www.cnblogs.com/zhaoj ...
- Linux下获取java堆栈文件并进行分析
当服务器内存飙升或者cpu负载飙升的时候,可以使用如下步骤排查问题: 1.终端输入top命令,键盘大写的情况下按P(cpu负载率从高到低排序)或者M(内存使用率从高到低排序),可以查看导致cpu或者内 ...
- MySQL/MariaDB表表达式(3):视图
视图是表表达式的一种,所以它也是虚拟表.对视图操作的时候会通过语句动态的从表中临时获取数据. 1.创建.修改视图 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED ...
- Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer
输出复杂结构 Data::Dumper.Data::Dump.Data::Printer都可以用来输出复杂的数据结构.本文只介绍简单的几个输出形式,以后再需要的地方再详细介绍. 前两者建议传递数据结构 ...
- QTimer 的使用
QTimer(重复和单发计时器) 应用 QTimer 时,先创建一个 QTimer 类,利用 connect 将 timeout() 与对应槽函数连接,在调用 start() 函数设置定时器时间间隔, ...