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

浅拷贝与深拷贝

时间:2024-10-23 19:21:40浏览次数:7  
标签:对象 list1 复制 引用 拷贝 属性

引言

       在编程中,深拷贝和浅拷贝是两种不同的对象复制方法,它们的主要区别在于复制的对象是否包含对其它对象的引用,以及这些引用是否也被复制。

一、浅拷贝

        浅拷贝是指创建一个新的对象,这个新对象与原对象具有相同的属性值,但如果属性值是对其它对象的引用,那么这两个对象将共享这些引用。也就是说,浅拷贝只复制了对象本身和它的直接属性值,但并没有复制这些属性值所引用的对象。

二、深拷贝

       深拷贝是指不仅复制对象本身和它的直接属性值,还递归地复制这些属性值所引用的所有对象。也就是说,深拷贝会创建一个全新的对象及其所有子对象,并且这些新对象与原对象之间没有共享引用。


三、示例

        Java没有像Python的copy模块那样内置的简单函数来进行浅拷贝和深拷贝(Java需要通过实现特定的接口(如Cloneable)或者编写自定义的复制逻辑来实现这些功能)。所以这里为了更加清晰明了选用Python来解释浅拷贝与深拷贝。
假设有如下列表:

import copy

list1 = [1, 2, [3, 4]]


使用浅拷贝:

list2 = copy.copy(list1)


此时list1和list2都包含相同的元素值,但如果改变了list1[2](即内部列表),那么这种改变也会反映在list2上,因为这两个列表中的第三个元素实际上是同一个对象。

使用深拷贝:

list3 = copy.deepcopy(list1)


在这里,list3是一个全新的副本,包括内部列表也是新的。因此,对list1所做的任何更改都不会影响到list3。

四、总结

浅拷贝:只复制对象本身和它的直接属性值,但不复制这些属性值所引用的对象。
深拷贝:不仅复制对象本身和它的直接属性值,还递归地复制这些属性值所引用的所有对象。

标签:对象,list1,复制,引用,拷贝,属性
From: https://blog.csdn.net/indiansummer_/article/details/143134817

相关文章

  • 手写深拷贝-基本实现
    <scriptsrc="./js/isObject.js"></script><script>////封装判断是否是对象类型//functionisObject(value){//constvalueType=typeofvalue//return(value!==null)&&(valueType==="object"|......
  • 【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数
     引言拷贝构造函数是C++中一个重要的特性,它允许一个对象通过另一个已创建好的同类型对象来初始化。了解拷贝构造函数的概念、作用、特点、规则、默认行为以及如何自定义实现,对于编写健壮和高效的C++程序至关重要。 C++类和对象系列文章,可点击下方链接阅读:【C++指南......
  • Day 9 文件基本处理 + 相(绝)对路径 + 文件打开方式 + 文件拷贝
    目录0昨日回顾字符编码1基本的文件处理1.1文件是什么?1.2如何使用文件1.3读取关闭1.4写2绝对路径与相对路径2.1绝对路径2.2相对路径3文件打开的三种方式3.1mode='r',只读3.2mode='w',只写,清空文件再写入3.3mode='a',追加,在后面追加写入文件3.4mode='rt',打开的......
  • Python中的深拷贝与浅拷贝
    目录1.可变对象和不可变对象2.用=赋值的问题3.copy模块登场4.重新认识列表对象5.浅拷贝,深拷贝浅拷贝(copy.copy())一维列表的浅拷贝深拷贝(copy.deepcopy())浅拷贝,深拷贝,直接赋值的区别1.可变对象和不可变对象在Python中,数据类型可以分为两大类:可变对象和不可变对象。常......
  • vue3 ref 或者reactive被赋值其他对象数据,用的是同一块内存,而不是深拷贝
    <template><divclass='box'>{{abcDemo?.a?.b?.c}}<button@click="changeAbc">ChangeABC</button><div>{{abdDemo?.a?.b?.c}}</div></div></template><sc......
  • MYSQL 表对表快速迁移-直接拷贝表空间文件.ibd进行迁移
    数据无价,操作前,建议先备份前提条件表结构一致:源数据库和目标数据库中的表结构必须完全相同。这包括表的列定义、索引、约束等。表使用InnoDB存储引擎:这种迁移方法仅适用于使用InnoDB存储引擎的表,因为.ibd文件是InnoDB表的表空间文件。数据库版本兼容:源......
  • 禁止拷贝构造函数和赋值操作符
     GlobalSettings(constGlobalSettings&)=delete;GlobalSettings&operator=(constGlobalSettings&)=delete;这两行代码是为了禁止拷贝构造函数和赋值操作符,也就是说,GlobalSettings 类的对象无法通过拷贝或赋值来创建或修改。这是为了防止类的实例被复制,通常用于实现单......
  • 【C++指南】C++中的浅拷贝与深拷贝:深入剖析
              ......
  • C++ 面向对象、特征、重载和重写、构造和析构、向上和向下转型、深浅拷贝。
    什么是面向对象(Object-OrientedProgramming,OOP)1.面向对象是一种编程范式,它通过将软件系统的设计和开发分解为“对象”(Object)的方式来实现更好地组织代码。面向对象的核心思想是将程序的结构分为对象,这些对象包含数据和操作这些数据的函数(即方法)。每个对象是类的实例,而类定......
  • 深拷贝与浅拷贝:JavaScript 里的“复制粘贴”大作战
    在JavaScript的世界里,复制对象就像是在玩“传声筒”游戏,听着听着就乱了套。今天,我们要聊聊两个“复制”大法:深拷贝和浅拷贝。他们就像是“有深度的朋友”和“表面交情的朋友”,那么到底有什么区别呢?让我们一起看看!1.浅拷贝:表面交情浅拷贝就像你和朋友一起去吃火锅,你们的......