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

    文章

    6596

    浏览量

    87959
  • python
    +关注

    关注

    53

    文章

    4709

    浏览量

    83711
  • 编程拷贝
    +关注

    关注

    0

    文章

    2

    浏览量

    5517

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

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

收藏 人收藏

    评论

    相关推荐

    使用Python进行自然语言处理

    在探讨使用Python进行自然语言处理(NLP)的广阔领域时,我们首先需要理解NLP的基本概念、其重要性、Python在NLP的优势,以及如何通过Python实现一些基础的NLP任务
    的头像 发表于 07-04 14:40 69次阅读

    Python智能家居系统代码介绍

    Python智能家居系统是一种基于Python编程语言开发的智能家居控制系统,在现代家庭得到了越来越广泛的应用。本文将详细介绍Python
    的头像 发表于 01-25 09:46 795次阅读

    split在python的用法

    split在python的用法 split()是Python中一个非常常用的字符串函数,它能够根据指定的分隔符将一个字符串分割成多个子字符串,并返回一个包含这些子字符串的列表。本文将详细介绍
    的头像 发表于 12-25 15:12 1701次阅读

    什么是零拷贝技术

    在传统操作系统的数据传输过程,系统内部会在磁盘、内存、缓存多次进行数据拷贝,每次都会占用CPU的资源,数据量小的时候还好。 随着数据量的增加,CPU的开销也会持续增加,尤其是在机器人图像数据
    的头像 发表于 11-27 16:20 310次阅读
    什么是零<b class='flag-5'>拷贝</b>技术

    pythontext的用法

    可以使用text(字符串)进行各种操作,例如创建、访问、修改、连接、比较和搜索等。下面将详细介绍Python中使用text的各种用法。 创建和访问文本: 在Python,我们可以使用
    的头像 发表于 11-23 15:46 1984次阅读

    pythonnumber代表什么

    (bool)。本文将详细介绍这些number类型以及它们在Python的应用。 首先,我们来介绍整数类型(int)。整数是Python中最
    的头像 发表于 11-22 09:50 1109次阅读

    Python如何表达复数

    Python,可以使用j或J来表示虚部。 以下是关于Python复数的详细介绍: 创建复数 要创建一个复数,可以直接使用复数的实部和虚部
    的头像 发表于 11-21 16:50 1464次阅读

    pythontuple的用法

    使用逗号进行分隔。元组在Python具有许多有用的特性和用法,本文将详尽、详实、细致地介绍Python中元组的全部内容。 首先,元组可以用来存储多个值。与列表不同的是,元组一旦创建就
    的头像 发表于 11-21 16:27 697次阅读

    传统IO演化至零拷贝的过程

    拷贝(Zero-Copy)用于在数据读写过程减少不需要的CPU拷贝,CPU就那么几个,减少它的负担自然可以提高处理效率。数据传输有本地的文件拷贝和通过socket进行文件传输两种,
    的头像 发表于 11-09 09:09 293次阅读
    传统IO演化至零<b class='flag-5'>拷贝</b>的过程

    Python中元类的作用

    1.什么是类 在理解元类之前,我们必须先掌握Python的类(class)。 和大多数语言一样,Python的类知识用来描述如何“生成一个对象”: 但是,在
    的头像 发表于 11-02 11:18 305次阅读
    <b class='flag-5'>Python</b>中元类的作用

    Python拷贝与深拷贝的操作

    【例子】浅拷贝与深拷贝 list1 = [ 123 , 456 , 789 , 213 ]list2 = list1list3 = list1[:] print (list2) # [ 123
    的头像 发表于 11-02 10:58 249次阅读

    Python环境搭建和LabVIEW的调用

    本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW调用Python的方法。
    的头像 发表于 10-13 17:56 1255次阅读
    <b class='flag-5'>Python</b>环境搭建和LabVIEW<b class='flag-5'>中</b>的调用

    pythonmatplotlib和seaborn介绍

    的使用和分析,而数据的整合最好的方式就是使用可视化的方式将数据变现出来。 matplotlib和seabornde介绍Python,我们可以使用matplotlib库和seaborn库来生成各种图表。matplotlib是
    的头像 发表于 10-07 11:16 788次阅读
    <b class='flag-5'>python</b><b class='flag-5'>中</b>matplotlib和seaborn<b class='flag-5'>介绍</b>

    C++深拷贝和浅拷贝详解

    当类的函数成员存在指针成员时会产生深拷贝和浅拷贝和问题。
    发表于 08-21 15:05 246次阅读
    C++深<b class='flag-5'>拷贝</b>和浅<b class='flag-5'>拷贝</b>详解

    基于python代码的人脸识别实例

    基于python代码的一个人脸识别的实例,完整的实例,本人在pycharm实测通过,是一个很基础的入门级的人脸检测和识别。
    发表于 07-18 11:11 13次下载