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实现实例
Apr 26 Python
在Python的列表中利用remove()方法删除元素的教程
May 21 Python
Python实时获取cmd的输出
Dec 13 Python
Python中查看文件名和文件路径
Mar 31 Python
基于python实现聊天室程序
Jul 27 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
Django处理多用户类型的方法介绍
May 18 Python
python写程序统计词频的方法
Jul 29 Python
python中的逆序遍历实例
Dec 25 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
python定时截屏实现
Nov 02 Python
Python 图片处理库exifread详解
Feb 25 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
php更新mysql后获取改变行数的方法
2014/12/25 PHP
phpStorm2020 注册码
2020/09/17 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
JS之相等操作符详解
2016/09/13 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Python中的默认参数详解
2015/06/24 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python 字典套字典或列表的示例
2019/12/16 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
社团活动总结书
2014/06/27 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers