侵权投诉

简述Python中深浅拷贝(copy)

马哥Linux运维 2021-07-29 16:55 次阅读

在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用。为了生成这个副本,就产生了拷贝。今天就说一下Python中的深浅拷贝问题。

一、深浅copy

赋值运算

l1 = [1, 2, 3, [22, 33]]l2 = l1l1.append(666)print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33], 666]

图解:

913a8f9c-edff-11eb-a97a-12bb97331649.png

注意: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列表中第一个元素改为6l1 = [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]]

小结:

浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。

深copy

import copyl1 = [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做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:

91dcdfcc-edff-11eb-a97a-12bb97331649.png

小结:

深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

为什么Python默认的拷贝方式是浅拷贝?

时间角度:浅拷贝花费时间更少。

空间角度:浅拷贝花费内存更少。

效率角度:浅拷贝只拷贝顶层数据,一般情况下比深拷贝效率高。

总结:

不可变对象在赋值时会开辟新空间。

可变对象在赋值时,修改一个的值,另一个也会发生改变。

深、浅拷贝对不可变对象拷贝时,不开辟新空间,相当于赋值操作。

浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。

深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。

Python 有多种方式实现浅拷贝,copy模块的copy 函数 ,对象的 copy 函数 ,工厂方法,切片等。

大多数情况下,编写程序时,都是使用浅拷贝,除非有特定的需求。

浅拷贝的优点:拷贝速度快,占用空间少,拷贝效率高。

原文链接:https://blog.csdn.net/mall_lucy/article/details/104531218

文章转载:CSDN

(版权归原作者所有,侵删)

编辑:jq

原文标题:图解 Python 中深浅拷贝(copy)

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

python导出excel格式的oracle数据报表讲解

python导出excel格式的oracle数据报表讲解(通信电源技术期刊官网)-该文档为pytho....
发表于 09-28 13:10 6次 阅读
python导出excel格式的oracle数据报表讲解

在鸿蒙上使用Python进行物联网编程

在上一篇帖子《使用 Python 开发鸿蒙设备程序(1-GPIO 外设控制)》中,已经成功的使用 P....
的头像 HarmonyOS技术社区 发表于 09-28 09:55 109次 阅读
在鸿蒙上使用Python进行物联网编程

怎样去实现一种基于Python的OPC UA编程

怎样去实现一种基于Python的OPC UA编程? 如何通过FreeOpcUa创建自己的地址空间? ...
发表于 09-28 09:35 0次 阅读

用Python完成鸿蒙开发板外设控制

话说很久以前,我将 MicroPython 的解释器给“挖”了出来,然后做了适配,成功运行于鸿蒙设备....
的头像 HarmonyOS技术社区 发表于 09-28 09:22 135次 阅读

请问如何选择合适机械的伺服电机?

请问如何选择合适机械的伺服电机?
发表于 09-27 07:57 0次 阅读

pandas筛选数据的8个小技巧

  日常用 Python 做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想....
的头像 数据分析与开发 发表于 09-26 11:04 561次 阅读
pandas筛选数据的8个小技巧

Python连接Oracle数据库

Python连接Oracle数据库(深圳市核达中远通电源技术股份有限公司招聘)-该文档为Python....
发表于 09-24 17:20 11次 阅读
Python连接Oracle数据库

深刻理解Python中的元类(metaclass)

深刻理解Python中的元类(metaclass)(大工20春电源技术在线作业2)-该文档为深刻理解....
发表于 09-24 16:12 8次 阅读
深刻理解Python中的元类(metaclass)

分享Python 流畅的Python

目录: 第一部分 序幕 第 1 章 Python 数据模型 1.1 一摞Python风格的纸牌 1.2 如何使用特殊方法 1.2.1 模拟数值...
发表于 09-23 20:39 101次 阅读
分享Python 流畅的Python

Python后端项目的协程是什么

最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用“异步”协程的方式实现。看着满....
的头像 Linux爱好者 发表于 09-23 14:38 149次 阅读

Python中三个json组件的安装方式

在 Python 使用用 json.dumps(data) 时突然发现特别慢,data 本身不大,但....
的头像 马哥Linux运维 发表于 09-23 14:35 146次 阅读
Python中三个json组件的安装方式

如何利用Python语言来控制电机

如何利用Python语言来控制电机? 如何利用L298N驱动板来控制电机? ...
发表于 09-22 08:32 0次 阅读

初学者如何去选择一种编程语言

Python是什么?JavaScript有何优点? 对于初学者什么是最好的编程语言?...
发表于 09-22 06:26 0次 阅读

在Anaconda中安装python包seaborn

在Anaconda中安装python包seaborn(现代电源技术题库)-在Anaconda中安装p....
发表于 09-18 15:01 16次 阅读
在Anaconda中安装python包seaborn

Python科学计算利器Anaconda

Python科学计算利器Anaconda(开关电源技术毕业设计)-Python科学计算利器Anaco....
发表于 09-18 14:26 18次 阅读
Python科学计算利器Anaconda

Python主要有哪几大应用领域

Python是什么?Python的特点是什么? Python有哪些应用领域? ...
发表于 09-18 06:19 0次 阅读

如何使用工业树莓派做ython的PWM控制

虹科工业树莓派 准备工作 硬件: 虹科工业树莓派1台 DIO模块1个 Windows系统电脑1台 L....
的头像 广州虹科电子科技有限公司 发表于 09-16 10:57 1565次 阅读
如何使用工业树莓派做ython的PWM控制

Python解释器的基本结构

简介Byterun是一个用Python实现的Python解释器。通过对Byterun的研究,我惊奇地发现Python解释器的基本结构很容易符合500行...
发表于 09-16 06:42 0次 阅读

python爬取猫咪交易数据

最近发现身边朋友开始养猫咪的也来越多了,甚至有的人会花大几千块钱去买一只猫来养。现在很流行养一些比较名贵的猫,比如橘猫、...
发表于 09-15 16:08 303次 阅读

基于Python-casacore的射电测量集文件生成方法

基于Python-casacore的射电测量集文件生成方法(开关电源技术试卷)-该文档为基于Pyth....
发表于 09-15 13:11 19次 阅读
基于Python-casacore的射电测量集文件生成方法

如何避免程序员面向监狱编程

转眼间白驹过隙般飞奔而去,而在岁末年初的当口,笔者在回顾这一年程序员世界的大事件后,突然发觉如何避免程序员面向监狱编程是...
发表于 09-14 07:51 0次 阅读

python连接手机自动搜集蚂蚁森林能量资料下载

1、python连接手机自动搜集蚂蚁森林能量1、首先我们需要下载一个ADB DRIVER INSTALL驱动安装。需要的可以到我的...
发表于 09-14 07:16 0次 阅读

符合IEPE标准的CbM机器学习赋能平台

CbM需要捕获全带宽数据,以确保时域和频域中的所有谐波、混叠及其他机械相互作用都得到考虑。这种数据收....
发表于 09-13 12:45 3804次 阅读
符合IEPE标准的CbM机器学习赋能平台

如何通过Python脚本实现WIFI密码的暴力破解

前言 本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的暴力破解,从而实现免费蹭网。....
的头像 马哥Linux运维 发表于 09-10 17:09 443次 阅读
如何通过Python脚本实现WIFI密码的暴力破解

如何在环境安装使用Python操作word

作者丨超级大洋葱806 https://tangxing.blog.csdn.net/article....
的头像 Android编程精选 发表于 09-05 15:13 469次 阅读
如何在环境安装使用Python操作word

如何利用Python抓取用户发的话题

大多数APP里面返回的是json格式数据,或者一堆加密过的数据 。这里以超级课程表APP为例,抓取超....
的头像 马哥Linux运维 发表于 09-05 09:37 234次 阅读
如何利用Python抓取用户发的话题

分享一个最新的的Python对象序列化方式

许多Python标准库都有一些未被赏识的精华。其中之一是允许简单优雅的基于参数类型的函数分发。这一特....
的头像 马哥Linux运维 发表于 09-01 15:19 788次 阅读
分享一个最新的的Python对象序列化方式

jsonpath库中的常规功能介绍

1 简介 在日常使用Python的过程中,我们经常会与json格式的数据打交道,尤其是那种嵌套结构复....
的头像 Linux爱好者 发表于 09-01 14:11 210次 阅读
jsonpath库中的常规功能介绍

Python 代码加速运行的的小技巧

Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,....
的头像 Android编程精选 发表于 09-01 11:28 273次 阅读

如何过滤掉MySQL大批量插入的重复数据

线上库有6个表存在重复数据,其中2个表比较大,一个96万+、一个30万+,因为之前处理过相同的问题,....
的头像 阿铭linux 发表于 08-27 11:00 311次 阅读

基于Rust基础上如何去编写一个Linux内核模块

编者按:近些年来 Rust 语言由于其内存安全性和性能等优势得到了很多关注,尤其是 Linux 内核....
的头像 开关电源芯片 发表于 08-27 09:59 1118次 阅读

女友让翻译化妆品标签 看大佬如何用Python轻松解决

最近小编遇到一个生存问题,女朋友让我给她翻译英文化妆品标签。美其名曰:“程序猿每天英语开发,英文一定....
的头像 阿铭linux 发表于 08-25 17:27 284次 阅读

OpenCV中的Python实现

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Window....
的头像 人工智能 发表于 08-25 15:55 233次 阅读

利用Python和PyTorch处理面向对象的数据集

本篇是利用 Python 和 PyTorch 处理面向对象的数据集系列博客的第 2 篇。 如需阅读第....
的头像 FPGA开发圈 发表于 08-25 15:30 1211次 阅读

如何使用Python来制作酷炫的图形

1. 什么是turtle turtle又称为海龟绘图,是Wally Feurzeig, Seymou....
的头像 上海磐启微电子有限公司 发表于 08-25 11:36 319次 阅读

python程序里如何链接MySQL数据库

在python程序里,如何链接MySQL数据库? 连接MYSQL需要3步 1、安装 必须先安装MyS....
的头像 奈因PCB电路板设计 发表于 08-23 14:56 1595次 阅读

Python虚拟环境pipenv的使用

一般我们创建 Python 项目的时候都会创建一个虚拟环境,这样做的好处就是会把项目环境和操作系统环....
的头像 开关电源芯片 发表于 08-23 10:15 215次 阅读

如何用Python制作出一个二维码

下载myqr库 使用windows+R键,输入cmd调出命令窗口 在黑框里输入(在python3环境....
的头像 阿铭linux 发表于 08-17 09:48 280次 阅读
如何用Python制作出一个二维码

如何用python自制一款炫酷的音乐播放器

前言 晚上坐在电脑面前,想着一边撸代码,一边听音乐。搜了搜自己想听的歌,奈何好多歌曲都提示需要版权,....
的头像 阿铭linux 发表于 08-17 09:37 2423次 阅读

浅析具有内置数据库和身份验证支持的 Python 框架

Replit 使编码人员能够快速构建应用程序。除了浏览器,开发人员可以启动服务器,将数据存储在 Re....
的头像 阿铭linux 发表于 08-14 11:05 407次 阅读

如何用Python写一个人脸识别系统

face_recognition是一个强大、简单、易上手的人脸识别开源项目,并且配备了完整的开发文档....
的头像 奈因PCB电路板设计 发表于 08-11 10:37 2649次 阅读
如何用Python写一个人脸识别系统

抽样的几种常用方法以及在Python中是如何实现的

大家好,今天来和大家聊聊抽样的几种常用方法,以及在Python中是如何实现的。 抽样是统计学、机器学....
的头像 上海磐启微电子有限公司 发表于 08-10 15:16 365次 阅读

道术之间:人文社科教师为什么要学习AI 这是道与术的统一

我们的读者,应该对在人文社科领域中的AI技术并不陌生。 几年来,我们报道过AI应用于古文字识别、考古....
的头像 脑极体 发表于 08-09 19:06 2336次 阅读

Python程序语法元素分析资源下载

Python程序语法元素分析资源下载
发表于 08-09 09:23 56次 阅读

如何用Python对数据库中的数据进行增删改查

pyhton如何连接mysql数据库 1、导入模块 2、打开数据库连接 3、创建游标对象cursor....
的头像 Les 发表于 08-05 10:22 293次 阅读

Python在嵌入式项目中的辅助开发总结

Python在嵌入式项目中的辅助开发总结(嵌入式开发试题)-该文档为Python在嵌入式项目中的辅助....
发表于 08-04 10:11 45次 阅读
Python在嵌入式项目中的辅助开发总结

基于Python的实时嵌入式软件测试脚本总结

基于Python的实时嵌入式软件测试脚本总结(嵌入式开发技术栈)-该文档为基于Python的实时嵌入....
发表于 07-30 12:31 62次 阅读
基于Python的实时嵌入式软件测试脚本总结

手动删除python导致的问题如何解决?

情况说明 在ubuntu server 20.02下安装了python 2.7, 3.8.5, 3.....
的头像 云知声 发表于 07-28 09:37 388次 阅读

居然有比requests更强大Python库出现

最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用“异步”协程的方式实现。看着满....
的头像 阿铭linux 发表于 07-27 10:43 345次 阅读

如何用Python编写一个强大的科学计算环境

Spyder 是一个功能强大的科学计算环境,用 Python 原生编写。 它适用于 Python 开....
的头像 阿铭linux 发表于 07-09 09:51 307次 阅读

如何使用Python-OpenCV实现餐盘水果识别与计价的应用

导读本文主要介绍使用Python-OpenCV实现餐盘水果识别与计价的应用。 测试图像与说明 使用图....
的头像 新机器视觉 发表于 07-06 11:02 734次 阅读

基于OpenCV经典霍夫变换的一些内容

本文主要讲述的是霍夫变换的一些内容,并加入一些在生活中的应用,希望能对读者对于霍夫变换的内容有所了解....
的头像 新机器视觉 发表于 07-06 10:43 416次 阅读

Zephyr如何在第三方工具链下开启TLS

在Zephyr TLS线程本地存储的实现一文中说明了如何在Zephyr上使用TLS,在这种默认的情况....
的头像 云知声 发表于 07-05 08:58 365次 阅读

机器学习在卫星遥测分析建模中的应用综述

机器学习在卫星遥测分析建模中的应用综述
发表于 06-29 16:40 81次 阅读

如何利用Python实现快速Ping一个IP网段地址?

ping 命令是我们检查网络中最常用的命令,作为网络人员,基本上每天都会用到,可以很好地帮助我们分析....
的头像 马哥Linux运维 发表于 06-29 15:59 590次 阅读
如何利用Python实现快速Ping一个IP网段地址?

Flask + Vue的Web 框架 Flask 开发的词云生成应用

前言这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的词云生成应用,....
的头像 马哥Linux运维 发表于 06-28 09:30 341次 阅读
Flask + Vue的Web 框架 Flask 开发的词云生成应用

为做二次开发量身打造发嵌入式操作系统QuecPython

QuecPython——执行Python代码的运行环境,是一种全新的物联网开发方式。Quec取自Qu....
的头像 移远通信 发表于 06-26 16:51 609次 阅读

微软:这次VS Code升级是性能最强的Python编辑体验

微软已发布2021年5月针对 Visual Studio Code 的 Python 扩展更新,此次....
的头像 马哥Linux运维 发表于 06-26 16:04 574次 阅读

如何用 Python 提高工作效率?

996 一直是互联网老生常谈的话题了,但抛开其他只谈工作本身,你有没有想过,下班晚、加班,有时候可能....
的头像 模拟札记 发表于 06-26 14:24 468次 阅读

用Python就能自己打造一辆自动驾驶小车?

“自动驾驶”这一技术近年来非常热。尽管目前还不允许无人驾驶汽车上路,但很多新款汽车都已经有了辅助驾驶....
的头像 马哥Linux运维 发表于 06-24 16:06 627次 阅读