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 ...
随机推荐
- 多线程 Thread.yield 方法到底有什么用?
概念 我们知道 start() 方法是启动线程,让线程变成就绪状态等待 CPU 调度后执行. 那 yield() 方法是干什么用的呢?来看下源码. /** * A hint to the schedu ...
- Redis 再牛逼,也得设置密码!!
Redis 你再牛逼也得设置密码啊,不然会有安全漏洞,造成一些隐患. 还有,比如像出现下面这样的错,需要设置密码,或者关闭保护模式,所以还是设置密码比较安全.不然只能本地操作,不能远程连接. DENI ...
- jquery获取radio选中值及遍历
使用jquery获取radio的值,最重要的是掌握jquery选择器的使用,在一个表单中我们通常是要获取被选中的那个radio项的值,所以要加checked来筛选,比如有以下的一些radio项:1.& ...
- Jenkins系列之四——设置邮件通知
Jenkins持续集成,当我们自动打包部署完,我们可以发送一封邮件给相关的负责人.现介绍一下如何在Jenkins中配置实现邮件通知. 在Jenkins中配置实现邮件通知,Jenkins提供了两种方式的 ...
- 如何在mpvue下收集小程序的formId
什么是formId formId是小程序可以向用户发送模板消息的通行证,简单而言,你只有获取到formId,把它交给后台,后台同学才能向用户发送通知消息,而这个通行证的有效期只有七天.这是微信为了防止 ...
- mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期select DATE_SUB(curdate(),INTERVAL -1 DAY) ...
- myeclipse-common 找不到
1. 首先打开myeclipse 2. 找到myeclipse的顶部导航栏"myclipse"选项然后打开"Installation Summary..."然后 ...
- 【EF6学习笔记】(九)异步处理和存储过程
本篇原文:Async and Stored Procedures 为何要采用异步? 一个Web服务器肯定有可用线程的限制,那么在一些访问量特别大的情况下,线程肯定会消耗完:这个时候服务器肯定处理不了请 ...
- JavaScript和Ajax部分(3)
21. 原生(native)Ajax使用实例 //创建XMLHttpRequest对象的方法 function createXmlHttpRequest(){ if(window.ActiveXObj ...
- zabbix-proxy使用配置
简介 zabbix proxy可以代替zabbix server检索客户端的数据,然后把数据汇报给zabbix server,并且在一定程度上分担了zabbix server的压力.zabbix pr ...