首页 > 编程语言 >Python 高级编程必会之深浅拷贝

Python 高级编程必会之深浅拷贝

时间:2024-04-08 12:58:19浏览次数:15  
标签:name Python 编程 对象 引用 拷贝 数据结构

浅拷贝和深拷贝在Python中各有用武之地,正确的选择取决于具体的应用场景、数据结构的复杂性以及对性能的要求。理解这两种方法的工作原理和差异,是每个Python开发者在进行数据复制操作时必须掌握的基础。

 

在我们进行Python编程的时候,复制(拷贝)数据结构是一种常见的操作,比如当我们想要保留原始数据,对生成的数据副本进行修改时。Python中提供了两种不同的数据拷贝方式:浅拷贝和深拷贝,这两种方式在拷贝数据结构时有很大的不同,在实际编程中我们需要结合程序的性能和应用场景选择合适的拷贝方法。

变量传递引

我们知道在Python中,变量可以存放对于对象的引用(内存地址),当我们创建一个对象并且将其分配给一个变量时,这个变量就存储了该对象的引用,如果还有另外一个变量同时引用这个相同的对象,那么对其中一个变量所引用的对象所做的修改,另一个变量引用的对象也会发生变化。

class Student:    def __init__(self, name):        self.name = name
a = Student('张三')# a与b都是存放的对应Student对象的引用,b并没有重复存放Student对象,而是存放了对于其对象的引用b = aa.name = '李四'# 当修改Student对象时,b引用的对象都会发生变化print(a.name)print(b.name)

一层对象深浅拷贝

Python的copy模块提供了copy()函数来实现浅拷贝和deepcopy()函数来实现深拷贝。

通过下图内存分配过程,我们可以看到对于简单的一层数据结构对象,再进行深浅拷贝时并没有什么差异,两者的表现相同:

  • 对于可变类型 列表、字典、集合,使用深浅拷贝会复制对象并且创建新的内存空间

  • 对于不可变类型 数字、字符串、元组,使用深浅拷贝不会开辟新的内存空间,是通过引用指向原来的

图片

复合对象深浅拷贝

当对复合对象结构进行拷贝时,深拷贝和浅拷贝的表现就有很大的差异:

  • 浅拷贝仅对数据结构的第一层进行拷贝,并不会拷贝子级(内部)

  • 深拷贝是对数据结构是所有层次的拷贝,递归拷贝所有层级。

图片

深浅拷贝对比:

  • 浅拷贝通常比深拷贝更快,因为它不需要递归复制每个子对象

  • 深拷贝在拷贝复杂对象时会消耗较多时间和内存,因为它需要给每个嵌套对象创建新的内存空间

标签:name,Python,编程,对象,引用,拷贝,数据结构
From: https://blog.csdn.net/m0_58552717/article/details/137504215

相关文章

  • 【头歌-Python】流程控制自学引导
    禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/137461301参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301如果代码存在问题,麻烦大家指正~~有帮助麻烦点个赞~~数值类型自学引导第1关:按从小到大顺序输出小于n的非负整数第2关......
  • Python3.8-安装pip-autoremove
    pip-autoremove是一个Python第三方包管理工具扩展,它的作用是在移除指定Python包的同时,自动清理掉因该包而安装但目前已不再被任何其他包依赖的无用依赖项。pipinstallpip-autoremovepip-autoremovepyside2注意:需要将python安装目录的Scripts文件夹中的pip-autor......
  • Windows编程系列:图形编程基础2
    通过函数BeginPaint画图1、创建一个Windows桌面应用程序 2、找到WM_PAINT消息的处理函数,添加代码如下:1caseWM_PAINT:2{3PAINTSTRUCTps;4HDChdc=BeginPaint(hWnd,&ps);5TextOut(hdc,10,20,L"HelloWorld",10);//绘制文本......
  • 多次复制Excel符合要求的数据行:Python批量实现
      本文介绍基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,并将所得结果保存为新的Excel表格文件的方法。  首先,我们来明确一下本文的具体需求。现有一个Excel表格文件,在本文中我们就以.csv格式的文件为例;其中,如下图所......
  • Visual Studio 2022插件的安装及使用 - 编程手把手系列文章
          这次开始写手把手编程系列文章,刚写到C#的Dll程序集类库的博文,就发现需要先介绍VisualStudio2022的插件的安装及使用,因为在后面编码的时候会用到这些个插件,所以有必要先对这个内容进行介绍。      其实笔者使用的VisualStudio2022的插件不多,因为有些插件......
  • 深浅拷贝
    深拷贝复制后的内容改变,原来的列表不受影响copy.deepcopy()浅拷贝复制后的内容改变,原来的列表也受影响只会复制顶层对象,不影响深层的可变数据类型copy.copy()importcopynum=[1,2,3,[1,2]]num_new=copy.copy(num)print(num_new)num_new.append(5)print(num)p......
  • Python集合
    在Python中,集合是一种无序、可变的数据类型,用于存储不重复的元素。Python提供了两种内置的集合类型:set和frozenset。set(集合):set是可变的,意味着可以对其进行增删改操作。通过花括号{}或者使用set()函数来创建集合。集合中的元素是不可重复的,因此添加重复元素不会引发错......
  • 计算机毕业设计项目:springboot 智能答疑系统 96852(开题答辩+程序定制+全套文案 )上万套
    毕业论文(设计) 题   目springboot智能答疑系统学   院       XXXXX     专业班级   XXXXX学生姓名       XXXX    指导教师            XXXX          撰写日期:202 年 月 日目 录摘要......
  • 计算机毕业设计项目:新生儿疫苗接种管理系统 87023(开题答辩+程序定制+全套文案 )上万套
    PHP新生儿疫苗接种管理系统系   院XXXX学科门类XXX专   业 XXX班级XXX学   号XXX姓   名XXX指导教师XXX教师职称XXX摘 要新生儿计划免疫是根据危害儿童健康的一些传染病,利用安全有效的疫苗,按照规定的免疫程序进行预防接种,......
  • 如何建立python应用的docker镜像
    Docker是一种轻量级的容器技术,能够帮助开发人员轻松地将应用程序打包和部署到不同的环境中。Python是一种流行的编程语言,Docker可以帮助我们将Python应用程序打包成镜像,方便部署到不同的容器环境中。本文将介绍如何使用Docker构建Python应用程序的镜像。安装Docker在开始构建Pyt......