图解Python中深浅copy(通俗易懂)


Posted in Python onSeptember 03, 2020

一、深浅copy

赋值运算

l1 = [1, 2, 3, [22, 33]]
l2 = l1
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33], 666]

图解:

图解Python中深浅copy(通俗易懂)

注意:l2 = l1是一个指向,是赋值,和深浅copy无关。

浅copy

其实列表是一个一个的槽位,每个槽位存储的是该对象的内存地址

例1. 给大列表添加元素
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
# 或者下面这种方式,也是浅copy
# import copy
# l2 = copy.copy(l1)
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

例2. 给小列表添加元素
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[-1].append(666)

print(l1) # [1, 2, 3, [22, 33, 666]]
print(l2) # [1, 2, 3, [22, 33, 666]]、

例3. 将l1列表中第一个元素改为6
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[0] = 6

print(l1) # [6, 2, 3, [22, 33]]
print(l2) # [1, 2, 3, [22, 33]]

图解:

例1

图解Python中深浅copy(通俗易懂)

例2

图解Python中深浅copy(通俗易懂)

例3

图解Python中深浅copy(通俗易懂)

总结:

浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。

注意:

切片中,如果是全切,属于浅copy。

深copy

import copy
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
l1.append(666)
print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

图解:

本质如下图:

图解Python中深浅copy(通俗易懂)

但是python对深copy做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:

图解Python中深浅copy(通俗易懂)

总结:

深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

到此这篇关于图解Python中深浅copy(通俗易懂)的文章就介绍到这了,更多相关Python 深浅拷贝内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python文件与目录操作实例详解
Feb 22 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python 加密与解密小结
Dec 06 Python
python 自动批量打开网页的示例
Feb 21 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
python 字典操作提取key,value的方法
Jun 26 Python
python变量的存储原理详解
Jul 10 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
Python中格式化字符串的四种实现
May 26 Python
python mysql中in参数化说明
Jun 05 Python
python简单实现9宫格图片实例
Sep 03 #Python
django使用graphql的实例
Sep 02 #Python
django数据模型中null和blank的区别说明
Sep 02 #Python
sqlalchemy实现时间列自动更新教程
Sep 02 #Python
解决Python 函数声明先后顺序出现的问题
Sep 02 #Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 #Python
详解python with 上下文管理器
Sep 02 #Python
You might like
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP安全上传图片的方法
2015/03/21 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
python小程序实现刷票功能详解
2019/07/17 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
应届生.NET方向面试题
2015/05/23 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
小学数学教学反思
2014/02/02 职场文书
委托公证书范本
2014/04/03 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
Linux中如何安装并部署Redis
2022/04/18 Servers
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript