0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实例介绍Python中深浅拷贝

数据分析与开发 来源:数据分析与开发 作者:数据分析与开发 2020-12-16 11:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

一、深浅copy

赋值运算

注意:l2 = l1是一个指向,是赋值,和深浅copy无关。

浅copy

其实列表是一个一个的槽位,每个槽位存储的是该对象的内存地址

#例1. 给大列表添加元素

例2

例3

小结:

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

深copy

但是python对深copy做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:

小结:

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

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

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

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

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

总结:

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

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

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

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

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

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

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

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

责任编辑:xj

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

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7314

    浏览量

    93982
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89585
  • 编程拷贝
    +关注

    关注

    0

    文章

    2

    浏览量

    5743

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

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CUBEIDE调试过程,如何将数组仲的数据拷贝到电脑?

    请问,有什么办法可以在CUBEIDE 调试过程,将数组的数据拷贝到电脑上去?
    发表于 09-09 07:20

    python入门圣经-高清电子书(建议下载)

    此资料内容是一本针对所有层次的Python 读者而作的Python 入门电子书。 全书分两部分:第一部分介绍Python 编程所必须了解的基本概念,包括matplotlib、NumP
    发表于 04-10 16:53

    使用串口dma环形接收+空闲中断,触发空闲中断后进入任务拷贝数据发现拷贝的数据全为0,怎么处理?

    求助,我使用串口dma环形接收+空闲中断,默认应该开了缓存,在触发空闲中断后进入任务拷贝数据发现拷贝的数据全为0,但是我挂上调试之后在拷贝之前只要打上断点断一次执行之后再执行就正常了
    发表于 03-27 06:17

    零基础入门:如何在树莓派上编写和运行Python程序?

    在这篇文章,我将为你简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一个简单的Pyth
    的头像 发表于 03-25 09:27 1524次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核空间与用户空间的数据拷贝之数据拷贝介绍

    本帖最后由 jf_13411809 于 2025-3-20 14:10 编辑 在Linux系统,内核空间和用户空间是两个独立的地址空间,它们有不同的访问权限和内存保护机制。在内核空间和用户
    发表于 03-20 11:50

    Python在嵌入式系统的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的库和快速的开发周期,这使得它在某些嵌入式场景中非常有用,以下是
    的头像 发表于 03-19 14:10 1191次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-内核空间与用户空间的数据拷贝之数据拷贝介绍

    在Linux系统,内核空间和用户空间是两个独立的地址空间,它们有不同的访问权限和内存保护机制。在内核空间和用户空间之间进行数据传输时,需要进行数据拷贝操作。Linux内核提供了几种方法来实现内核
    发表于 03-19 08:55

    USB3.0移动硬盘拷贝机 如何选 ?

    捷美USB3.2移动硬盘拷贝机专为大规模硬盘复制设计,一次可同时复制40颗硬盘,仅需3.5小时完成,比传统计算机拷贝快500%。采用一键式操作,无需人工监控,降低人力成本。内建bit to bit比对功能,确保数据完整性和安全性。独立运行,开机即用,无需计算机或额外软件,
    的头像 发表于 03-18 17:16 1212次阅读
    USB3.0移动硬盘<b class='flag-5'>拷贝</b>机 如何选 ?

    如何将python文件导入到ROS系统

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统
    的头像 发表于 02-11 11:08 1195次阅读
    如何将<b class='flag-5'>python</b>文件导入到ROS系统<b class='flag-5'>中</b>

    四频拷贝遥控器走俏海外

    常有同事反馈和客户沟通时,需要了解客户的遥控器频率才能推荐合适的拷贝遥控器,这就需要客户拆开遥控器查看才能确定,而有些扣位结合的原装遥控器,强行拆开会导致遥控器损坏,对于客户来讲就是得不偿失的事了
    的头像 发表于 02-08 15:34 893次阅读
    四频<b class='flag-5'>拷贝</b>遥控器走俏海外

    FB08 1对7 U盘拷贝格式化机——高效数据复制工具

    FB08 1对7 U盘拷贝格式化机,采用台湾捷美原厂工艺,具备25MB/s的高速拷贝速度和8口同步复制功能,支持加密U盘免解密拷贝及USB 2.0/3.0设备。支持FAT16/FAT32格式化,兼容
    的头像 发表于 02-08 13:51 781次阅读
    FB08 1对7 U盘<b class='flag-5'>拷贝</b>格式化机——高效数据复制工具

    FB16 1对15 U盘拷贝格式化机——高效数据复制工具

    FB16 1对15 U盘拷贝格式化机,采用台湾捷美原厂工艺,具备25MB/s高速拷贝速度和16口同步复制功能,支持加密U盘免解密拷贝及USB 2.0/3.0设备。支持FAT16/FAT32格式化
    的头像 发表于 02-07 17:36 755次阅读
    FB16 1对15 U盘<b class='flag-5'>拷贝</b>格式化机——高效数据复制工具

    Flexus 云服务器 X:Python 安装的极致便捷之旅

    配置和环境设置方面,可能会遇到各种挑战。为了帮助开发者更高效地使用 Flexus 云服务器 X,本文将详细介绍如何在 Flexus 云服务器 X 上安装 Python,并突出其便捷性。 一
    的头像 发表于 01-07 17:00 547次阅读
    Flexus 云服务器 X:<b class='flag-5'>Python</b> 安装的极致便捷之旅

    华为云 Flexus X 实例下的场景体验——小企业使用 Python 语言——超迅速搭建简单公网 API 接口服务

      前言 小企业为了快速搞定一些接口功能如果不使用 Python 的话相对来说复杂度还是很高的,这里我来通过【华为云 Flexus X 实例】来迅速的搭建一个 Python 的 WebApi 示例
    的头像 发表于 12-27 13:46 855次阅读
    华为云 Flexus X <b class='flag-5'>实例</b>下的场景体验——小企业使用 <b class='flag-5'>Python</b> 语言——超迅速搭建简单公网 API 接口服务

    M.2硬盘拷贝,该怎么选择适合的工具?FPGA拷贝机到底有没有用?

    探索SP-B1011 M.2 FPGA硬盘拷贝机,一款支持NVMe和SATA接口的高效数据管理工具。无需计算机,即插即用,提供快速拷贝、全盘拷贝和安全抹除模式。适用于个人和专业IT人士,满足各种数据备份和恢复需求。
    的头像 发表于 12-12 11:02 1078次阅读
    M.2硬盘<b class='flag-5'>拷贝</b>,该怎么选择适合的工具?FPGA<b class='flag-5'>拷贝</b>机到底有没有用?