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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
python之yield表达式学习
Sep 02 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
详解python中的json和字典dict
Jun 22 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python 生成图形验证码的方法示例
Nov 11 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 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+java实现自动新闻滚动窗口
2006/10/09 PHP
我用php+mysql写的留言本
2006/10/09 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python装饰器用法示例小结
2018/02/11 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
python实现按关键字筛选日志文件
2019/12/24 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
Python中常见的数制转换有哪些
2020/05/27 Python
美国社交购物市场:MassGenie
2019/02/18 全球购物
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
中专生学习生活的自我评价分享
2013/10/27 职场文书
实习老师离校感言
2014/02/03 职场文书
上党课的心得体会
2014/09/02 职场文书
大学生简短的自我评价
2014/09/12 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
邀请函样本
2015/02/02 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS