图解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中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
为什么称python为胶水语言
Jun 16 Python
python中id函数运行方式
Jul 03 Python
python中time tzset()函数实例用法
Feb 18 Python
python3美化表格数据输出结果的实现代码
Apr 14 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
php 变量未定义等错误的解决方法
2011/01/12 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
javascript数组排序汇总
2015/07/07 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
python获取从命令行输入数字的方法
2015/04/29 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
Python 没有main函数的原因
2020/07/10 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
化学专业毕业生自荐信
2013/11/15 职场文书
专营店会计助理岗位职责
2013/11/29 职场文书
会议接待欢迎词
2014/01/12 职场文书
拔河比赛口号
2014/06/10 职场文书
个人党性分析材料
2014/12/19 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL
小程序实现侧滑删除功能
2022/06/25 Javascript