图解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的curses库使用教程
Apr 11 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
python自动12306抢票软件实现代码
Feb 24 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
浅析Python数据处理
May 02 Python
python使用Plotly绘图工具绘制柱状图
Apr 01 Python
Python爬虫学习之翻译小程序
Jul 30 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
python元组拆包实现方法
Feb 28 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
层叠菜单的动态生成
2006/10/09 PHP
实用函数3
2007/11/08 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
javascript 写类方式之八
2009/07/05 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
js charAt的使用示例
2014/02/18 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
python远程邮件控制电脑升级版
2019/05/23 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python