图解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中精确输出JSON浮点数的方法
Apr 18 Python
深度剖析使用python抓取网页正文的源码
Jun 11 Python
Python中分数的相关使用教程
Mar 30 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
Python探索之Metaclass初步了解
Oct 28 Python
python模块之paramiko实例代码
Jan 31 Python
python实现简单登陆流程的方法
Apr 22 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
python修改txt文件中的某一项方法
Dec 29 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
windows支持哪个版本的python
Jul 03 Python
Python 串口通信的实现
Sep 29 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
漂亮但不安全的CTB
2006/10/09 PHP
用PHP实现图象锐化代码
2007/06/14 PHP
php表单提交问题的解决方法
2011/04/12 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
jQuery1.6 使用方法二
2011/11/23 Javascript
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
vue--vuex详解
2019/04/15 Javascript
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
python获取引用对象的个数方式
2019/12/20 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
《特殊的葬礼》教学反思
2014/04/27 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
鸡毛信观后感
2015/06/11 职场文书
老人与海读书笔记
2015/06/26 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技