图解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中atexit模块的基本使用示例
Jul 08 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
python 接口返回的json字符串实例
Mar 27 Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
Python双链表原理与实现方法详解
Feb 22 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
用Python远程登陆服务器的步骤
Apr 16 Python
Python机器学习实战之k-近邻算法的实现
Nov 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
?生?D片??C字串
2006/12/06 PHP
PHP提取中文首字母
2008/04/09 PHP
php session安全问题分析
2011/06/24 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
微信小程序实现日历功能
2018/11/27 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
Python中实现常量(Const)功能
2015/01/28 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
Collection和Collections的区别
2016/05/02 面试题
行政部总经理岗位职责
2014/01/04 职场文书
业务员辞职信范文
2015/03/02 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书