图解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中的日志模块logging
Jun 19 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python中的decimal类型转换实例详解
Jun 26 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
基于django传递数据到后端的例子
Aug 16 Python
Python xlrd模块导入过程及常用操作
Jun 10 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 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页面间传递参数实例代码
2008/06/05 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
PHP中phar包的使用教程
2017/06/14 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
js简单抽奖代码
2015/01/16 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
python pandas 时间日期的处理实现
2019/07/30 Python
Python实现直播推流效果
2019/11/26 Python
用python对oracle进行简单性能测试
2020/12/05 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
优秀应届毕业生推荐信
2014/02/18 职场文书
法律七进实施方案
2014/03/15 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
离婚被告代理词
2015/05/23 职场文书
2015党建工作简报
2015/07/21 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python