python3 深浅copy对比详解


Posted in Python onAugust 12, 2019

一、赋值对比

1、列表

l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2)        #[1, 2, 3, 'a'] [1, 2, 3, 'a']
print(id(l1),id(l2))     #43499848 43499848
#可以看到两个列表的值以及id值相同,对应的是同一个内存地址

2、字典

dic = {'name':'barry'}
dic1 = dic
dic['age'] = 18
print(dic,dic1)      #{'name': 'barry', 'age': 18} {'name': 'barry', 'age': 18}
print(id(dic),id(dic1))    #31157344 31157344
#可以看到两个字典的值以及id值相同,对应的是同一个内存地址

3、字符串

s = 'alex'
s1 = s
s2 = s.replace('a','A')
print(s,s1,s2)         #alex alex Alex
print(id(s),id(s1),id(s2))      #31040208 31040208 31040376
#赋值是同一个内存地址,替换字符串后的变量s2是另外的地址

二、深浅copy

1、浅copy

对于浅copy来说,第一层创建的是新的内存地址。而从第二层开始,指向的是同一个内存地址,所有,对于第二层以及更深的层数来说,保持一致性。

# 1、普通浅copy

l1 = [1,2,3,4]
l2 = l1.copy()
l1.append('a')
print(l1,l2)           #[1, 2, 3, 4, 'a'] [1, 2, 3, 4]
print(id(l1),id(l2))       #37077320 37078664
#id内存地址不一样,创建了两个地址空间,一个改变,另一个不会变化

# 2、嵌套浅copy

import copy
l1 = [1,[22,33,44],3,4,]
l2 = copy.deepcopy(l1)
# 改变第一层
l1[0] = 111
print(l1,l2)          #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048
# 改变第二层
l1[1].append('a')
print(l1,l2)          # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048

2、 深copy.deepcopy()

对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。

import copy
l1 = [1,[22,33,44],3,4,]
l2 = copy.deepcopy(l1)
# 改变第一层
l1[0] = 111
print(l1,l2)          #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048
# 改变第二层
l1[1].append('a')
print(l1,l2)          # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]
print(id(l1),id(l2))      #43238536 43239048

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬虫常用的模块分析
Aug 29 Python
python简单判断序列是否为空的方法
Jun 30 Python
用Python抢过年的火车票附源码
Dec 07 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
Python Pandas数据结构简单介绍
Jul 03 Python
pandas数据处理进阶详解
Oct 11 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
python温度转换华氏温度实现代码
Dec 06 Python
python获取对象信息的实例详解
Jul 07 Python
Django获取该数据的上一条和下一条方法
Aug 12 #Python
python中的反斜杠问题深入讲解
Aug 12 #Python
Django CBV与FBV原理及实例详解
Aug 12 #Python
Python利用requests模块下载图片实例代码
Aug 12 #Python
django+tornado实现实时查看远程日志的方法
Aug 12 #Python
Django结合ajax进行页面实时更新的例子
Aug 12 #Python
django fernet fields字段加密实践详解
Aug 12 #Python
You might like
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
js实现表格数据搜索
2020/08/09 Javascript
让python在hadoop上跑起来
2016/01/27 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
Java中实现多态的机制
2015/08/09 面试题
linux面试题参考答案(8)
2016/04/19 面试题
运动会领导邀请函
2014/01/10 职场文书
给老婆的保证书范文
2014/04/28 职场文书
业务内勤岗位职责
2014/04/30 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
社区服务标语
2014/07/01 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
综合测评自我评价
2015/03/06 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书