图解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 Web开发框架Django
Jun 30 Python
Python with的用法
Aug 22 Python
使用python编写监听端
Apr 12 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python3 map函数和filter函数详解
Aug 26 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python3中布局背景颜色代码分析
Dec 01 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
Python图片检索之以图搜图
May 31 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中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
下载给定网页上图片的方法
2014/02/18 Python
使用python解析xml成对应的html示例分享
2014/04/02 Python
python脚本实现查找webshell的方法
2014/07/31 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Django进阶之CSRF的解决
2018/08/01 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python 函数中的参数类型
2020/02/11 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
英文导游欢迎词
2014/01/11 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python