图解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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Python与Redis的连接教程
Apr 22 Python
Python 正则表达式的高级用法
Dec 04 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
python 获取当天每个准点时间戳的实例
May 22 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
python 切换root 执行命令的方法
Jan 19 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
基于python 将列表作为参数传入函数时的测试与理解
Jun 05 Python
Python 创建TCP服务器的方法
Jul 28 Python
python中复数的共轭复数知识点总结
Dec 06 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
Zend Framework分发器用法示例
2016/12/11 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
python和shell获取文本内容的方法
2018/06/05 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
python自动点赞功能的实现思路
2020/02/26 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
学生党支部先进事迹
2014/02/04 职场文书
年度考核自我鉴定
2014/03/19 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
护士个人年度总结范文
2015/02/13 职场文书
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python
Vue router配置与使用分析讲解
2022/12/24 Vue.js