首页 > 其他分享 >浅拷贝和深拷贝

浅拷贝和深拷贝

时间:2023-11-14 15:26:33浏览次数:29  
标签:数据结构 对象 复制 拷贝 copy 原始数据

浅拷贝和深拷贝

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在编程中用来复制数据结构的两个概念。它们在复制数据时的行为和效果有所不同:

浅拷贝(Shallow Copy)

浅拷贝创建了一个新的数据结构,该数据结构的内容与原始数据结构相同。然而,对于数据结构中包含的对象(如列表、字典、类实例等),浅拷贝只复制了对这些对象的引用,而不复制对象本身。这意味着原始数据结构和浅拷贝后的数据结构会共享相同的子对象。如果你修改了浅拷贝后的数据结构中的子对象,那么原始数据结构中的相应子对象也会受到影响。

在Python中,可以使用标准库模块中的copy模块来执行浅拷贝,例如使用copy.copy()函数。

深拷贝(Deep Copy)

深拷贝创建了一个新的数据结构,该数据结构的内容与原始数据结构相同,包括所有的子对象。换句话说,深拷贝会递归地复制原始数据结构中的所有对象,以便原始数据结构和深拷贝后的数据结构是完全独立的,互不影响。

在Python中,可以使用标准库模块中的copy模块来执行深拷贝,例如使用copy.deepcopy()函数。

以下是一个示例,演示了浅拷贝和深拷贝的区别:

import copy

# 原始数据结构
original_list = [1, [2, 3], [4, 5]]

# 浅拷贝
shallow_copy = copy.copy(original_list)

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改浅拷贝中的子对象
shallow_copy[1][0] = 999

# 修改深拷贝中的子对象
deep_copy[1][0] = 888

# 原始数据结构不受影响
print(original_list)   # [1, [999, 3], [4, 5]]

在上述示例中,浅拷贝只复制了对原始数据结构中的子列表的引用,所以修改浅拷贝中的子列表也会影响原始数据结构。而深拷贝复制了整个子列表,因此修改深拷贝中的子列表不会影响原始数据结构。

标签:数据结构,对象,复制,拷贝,copy,原始数据
From: https://www.cnblogs.com/mio1221/p/17831675.html

相关文章

  • Java复制文件的4种方式及拷贝文件到另一个目录下的实例代码
    尽管Java提供了一个可以处理文件的IO操作类。但是没有一个复制文件的方法。复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候。然而有几种方法可以进行Java文件复制操作,下面列举出4中最受欢迎的方式。1.使用FileStreams复制这是最经典的方式将一个文件的内容复......
  • 2.4 Windows驱动开发:内核字符串拷贝与比较
    在上一篇文章《内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法,本章将继续探索字符串的拷贝与比较,与应用层不同内核字符串拷贝与比较也需要使用内核专用的API函数,字符串的拷贝往往伴随有内核内存分配,我们将首先简单介绍内核如何分配堆空间,然后再以......
  • JAVA Set集合的深拷贝
    之前在做统计的时候,用到Set集合,存储到Map中,但是因为是浅拷贝,导致数据错误问题。这里记录下如何深度拷贝Set关于浅拷贝和深拷贝的的问题,请参考另一篇文章《JAVA的深拷贝和浅拷贝》简而言之:深拷贝是完全创建一个新的对象,是一个全新的对象。而浅拷贝仅仅复制所考虑的对象,而不复制......
  • 26.深拷贝与浅拷贝
    什么是拷贝拷贝是指使用一个已存在一个对象,生成一个新的对象,两个对象在内存中具有独立的存储空间。浅拷贝是指是创建一个新的对象时,只拷贝内容是原始对象的引用,而不是创建原始对象的副本数据。深拷贝是指创建一个新的对象,并递归地复制原始对象及其所有嵌套对象的内容,而不......
  • js实现深拷贝
    functiondeepClone(obj,hash=newWeakMap()){if(obj===null)returnobj//如果是null或者undefined我就不进行拷贝操作if(objinstanceofDate)returnnewDate(obj)if(objinstanceofRegExp)returnnewRegExp(obj)//可能是对象或者普通的值如果是......
  • 从一个git仓库拷贝到另一个git仓库(最详细)
    利用git从一个仓库拷贝一个项目到另一个仓库,并且log(日志记录)也能够一起过去。注意:目标仓库可以新建一个;如果用自己曾经用过的仓库里面的文件会被覆盖1、从原地址克隆一份裸版本库gitclone--barehttp://....(原始仓库地址)–bare创建的克隆版本库都不包含工作区,直接就......
  • .NET(C#) 对象的拷贝(浅拷贝和深拷贝)
    本文主要介绍.NET(C#),对象的拷贝,包括浅拷贝和深拷贝,以及浅拷贝和深拷贝的实现方式,不同的实现方式之间的性能对比。1、浅拷贝和深拷贝浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值......
  • java基础:深拷贝和浅拷贝的区别是什么?
    深拷贝和浅拷贝的区别是什么?原型模式:设计模式-->Springbean的Scope浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.深拷贝:被复制对象的所有变量都含有与原来......
  • 数组拷贝
    在a数组索引为1位置插入4然后将a拷贝到b行成新数组[2,5,8]a数组bint[]b=newint[a.length+1];System.arraycopy(a,0,b,0,1)将a数组的0到1索引的数拷贝到b数组起始为0的位置a:原数组0:a开始拷贝的位置b:拷贝到的数组0:拷贝到数组的起始位置1:a数组拷贝的......
  • python深浅拷贝学习
    copy的原文链接(仅供自己学习查看):python浅析格式化输出和深浅copy-战争热诚-博客园(cnblogs.com) 首先我们从切片技术说起。它应用于所有的序列,包括:列表,字符串,元祖。但是切片不能应用于字典,对于字典只能使用D.copy()和D.deepcopy()方法。下面具体说一下深......