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 相关文章推荐
Python3如何解决字符编码问题详解
Apr 23 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Django在win10下的安装并创建工程
Nov 20 Python
Python实现接受任意个数参数的函数方法
Apr 21 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
解决python3 pika之连接断开的问题
Dec 18 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
python实现飞船大战
Apr 24 Python
python如何用matplotlib创建三维图表
Jan 26 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 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中分页查询的两个解决方法比较
2013/05/02 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
linux中cd命令使用详解
2015/01/08 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
python基于SMTP协议发送邮件
2019/05/31 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
Python tkinter和exe打包的方法
2020/02/05 Python
python 5个顶级异步框架推荐
2020/09/09 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
财务管理专业应届毕业生求职信
2013/09/22 职场文书
岗位安全生产责任书
2014/07/28 职场文书
干部对照检查材料范文
2014/08/26 职场文书
商家认证委托书格式
2014/10/16 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL