图解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中的闭包实例详解
Aug 29 Python
Python使用Supervisor来管理进程的方法
May 28 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
Python Logging 日志记录入门学习
Jun 02 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
python找出列表中大于某个阈值的数据段示例
Nov 24 Python
python 使用shutil复制图片的例子
Dec 13 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Python作用域与名字空间原理详解
Mar 21 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php树型类实例
2014/12/05 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
php读取本地json文件的实例
2018/03/07 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
js中有关IE版本检测
2012/01/04 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python赋值操作方法分享
2013/03/23 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
为什么会有内存对齐
2016/10/10 面试题
给面试官的感谢信
2014/02/01 职场文书
关于环保的演讲稿
2014/05/10 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
教师个人事迹材料
2014/12/17 职场文书
端午节活动总结报告
2015/02/11 职场文书
小学生运动会广播
2015/08/19 职场文书