图解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中设置变量作为默认值时容易遇到的错误
Apr 03 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
使用python绘制常用的图表
Aug 27 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
python 统计代码耗时的几种方法分享
Apr 02 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 DataGrid 实现代码
2009/08/12 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
对python .txt文件读取及数据处理方法总结
2018/04/23 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
python excel转换csv代码实例
2019/08/26 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
pycharm的python_stubs问题
2020/04/08 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
门卫岗位安全职责
2013/12/13 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
献爱心标语
2014/06/21 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
教师党员个人自我评价
2015/03/04 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书