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 list语法学习(带例子)
Nov 01 Python
python中OrderedDict的使用方法详解
May 05 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
python在文本开头插入一行的实例
May 02 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
python实现支付宝转账接口
May 07 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
python numpy中setdiff1d的用法说明
Apr 22 Python
python前后端自定义分页器
Apr 13 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
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
Laravel实现表单提交
2017/05/07 PHP
php实现session共享的实例方法
2019/09/19 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Python语言描述随机梯度下降法
2018/01/04 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
python脚本实现验证码识别
2018/06/07 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
揭牌仪式主持词
2014/03/19 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
大学推普周活动总结
2015/05/07 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
浅析MongoDB之安全认证
2021/06/26 MongoDB
分享Python获取本机IP地址的几种方法
2022/03/17 Python