深拷贝和浅拷贝的区别

python之浅拷贝和深拷贝的区别 赋值 在我们开始讨论浅拷贝和深拷贝的区别之前,首先我们必须清楚什么是赋值? 在Python中,所谓的赋值实际上就是对象引用的传递而已,当创建一个对象的时候,再赋值给另外一个变量的时候,并不是赋值给另一个变量。而是把这个变量在地址空间的id地址值传递给另一个变量,简单的说就是拷贝了这个对象的引用。看图片,可能比较容易理解。 从图中,我们很容易的看到,a和b两个变量在地址空间中是一样。后来,我们又给... 阅读详情

一、深拷贝

深拷贝是一种复制操作,其目的是创建一个对象的完全独立副本,包括所有嵌套的对象或数组。深拷贝后的副本与原始对象在内存中是完全独立的,对副本的任何修改都不会影响到原始对象。深拷贝有以下几个特征
1.1 完全独立:深拷贝创建的对象副本与原始对象在内存中是两个不同的实体。这意味着副本的内存地址与原始对象的内存地址不同。
1.2 递归复制:深拷贝会递归地复制对象的所有层级。如果对象包含引用类型的属性(如数组、对象等),深拷贝会为这些属性创建新的实例,并且继续递归复制这些新实例中的属性。
1.3 循环引用:深拷贝需要能够处理对象中的循环引用,即对象直接或间接地引用自己。这要求深拷贝算法能够跟踪已经复制过的对象,避免无限循环。
1.4 特殊类型处理:深拷贝需要能够处理特殊类型的值,如函数、undefined、Date、RegExp等。这些值在简单的序列化和反序列化过程中可能会丢失或变形。
1.5 性能考虑:深拷贝由于需要递归复制和处理特殊类型,通常比浅拷贝更消耗资源。因此,在性能敏感的应用中,需要谨慎使用。
1.6 不可枚举属性:深拷贝应该复制对象的所有属性,包括不可枚举的属性。
1.7 原型链:深拷贝通常不复制对象的原型链,而是创建一个具有相同构造函数的新实例。
1.8 局限性:深拷贝虽然能够复制大多数类型的数据,但对于某些特殊情况(如带有特殊引用的对象、代理对象等)可能无法正确处理。

三、浅拷贝

3.1 定义:浅拷贝创建了一个新的对象,但是这个对象的属性值是指向原始对象属性值的引用
3.2 行为:如果原始对象的属性是基本类型(如数字、字符串、布尔值),浅拷贝会复制这些值。如果属性是引用类型(如数组、对象、函数),浅拷贝只会复制引用,而不是引用的对象本身。

三、拷贝的几种方式和局限性 (Object)

2.1 JSON.parse(JSON.stringify(obj))序列化和反序列,局限性如下
取不到值为 undefined 的 key
如果对象里有函数,函数无法被拷贝下来
无法拷贝对象原型链上的属性和方法
2.2 使用拓展运算符+解构赋值 ,局限性如下
当值为undefined、function、symbol会在转换过程中被忽略
2.3 Object.assign()方法合并对象 ,局限性如下
当对象只有一级属性为深拷贝 当对象中有多级属性时,二级属性后就是浅拷贝
2.4 通过 循环 遍历对象
2.5 以上几种方法的局限性 可以迭代为循环递归函数避免
玩转Isaac Sim动态控制:从随机舞动到精准操控Franka的5种控制模式实测 本文深入实测了在NVIDIA Isaac Sim仿真平台中,利用Dynamic Control模块对Franka机械臂进行精准操控的五种核心模式:位置控制、单关节位置控制、速度控制、单关节速度控制和力矩控制。通过详细的代码示例和对比分析,阐述了每种模式的适用场景、参数调优技巧及从随机运动到闭环控制的实现路径,为机器人算法验证提供了实用指南。 阅读详情

相关推荐

Twincat Scopeview录波中的Ringbuffer设置技巧与常见问题解决

本文深入解析了倍福Twincat Scopeview录波功能中Ringbuffer(环形缓冲区)的核心设置技巧与常见问题解决方案。针对数据丢失、触发时机不准等痛点,详细阐述了缓冲区大小、预触发样本、采样率等关键参数的优化配置,并提供了多通道同步、自动诊断等实战应用指南,帮助工程师高效捕捉和分析PLC数据。

rainy的博客 846

浅拷贝和深拷贝的区别

1、浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 2、深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。 3、区别:可变对象就不会这样会修改值后另存到一个新的地址上,而是直接再原对象的地址上把值给改变了,这个对象依然执行这个地址 4、本质区别:可变对象修改了值,不会新建一个内存地址的对象,不可变对象如果修改了值,及时复制了一份新的内存地址,原始地址的值不会被

m0_73770538的博客 1万+

微信支付V2,jsapi支付拉起收银台报错:调用支付JSAPI缺少参数:total_fee

拉起收银台报错

m0_54355172的博客 3873

浅拷贝与深拷贝的区别

浅拷贝与深拷贝 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 二、浅拷贝与深拷贝 深拷贝和浅拷贝是只针对Object和Array这样的引用数

SSophia的博客 7万+

BGE-Reranker-v2-M3介绍

重排序模型介绍

吉米_王 5894

zynq7020的arm A9核降频实录

zynq arm9 cortex a9 降频

qq_40011737的博客 8765

深拷贝与浅拷贝的区别及实现方式

浅拷贝只复制对象的第一层属性。这意味着,如果原对象或数组中的值是基本类型(如数字、字符串、布尔值等),那么新对象或数组中的对应值是独立的副本。但是,如果原对象或数组中的值是引用类型(如对象、数组等),那么新对象或数组中的对应值只是指向原引用的一个新引用。 深拷贝会递归地复制对象的所有层级,包括嵌套的对象和数组。这意味着深拷贝创建的新对象与原对象完全独立,任何对原对象的修改都不会影响到新对象,反之亦然。

jxnd123456的博客 7582

必知必会:DeepSeek-R1训练流程详解

必知必会:DeepSeek-R1训练流程详解

丨汀、的博客 287

深拷贝与浅拷贝

深拷贝与浅拷贝

weixin_57959921的博客 8444

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 290

SIWAVE仿真PCB操作说明

使用SIWAVE进行PCB仿真提取S参数的操作

sinat_15150363的博客 3069

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)

在实现深拷贝时,通常需要递归地复制对象的引用类型属性,以确保所有相关对象都被复制。而浅拷贝则只需要复制对象的基本属性即可。

qq_30657563的博客 5835

基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程

基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程

机器学习深度学习业余选手 1002

深拷贝与浅拷贝的原理和区别

我特别想写这篇,因为我看到了一篇非常非常优秀的博客,讲的巨好!直接贴上链接,强烈建议大家去阅读原博主的 https://www.cnblogs.com/echolun/p/7889848.html 1.深拷贝和浅拷贝的区别 B复制A,A变,B变,浅拷贝。 B复制A,A变,B不变,深拷贝。 举个简单example 平常的a赋值给b,a变,b并不会变。而对于对象obj2,这种简单的赋值,obj变,obj2变,就是浅拷贝了。 这是为啥呢?这就要我们从数据类型说起了。。。。 2.基本数据类型和引用数据类型 基

weixin_43795084的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浅拷贝与深拷贝的区别(详解)

浅拷贝与深拷贝的区别 html 浅拷贝与深拷贝 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 ​​ 二、浅拷贝与深拷贝 深拷贝和浅拷

Mark Sheng的博客 12万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

一文彻底搞懂深拷贝和浅拷贝的区别

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在复制对象或数据结构时所使用的两种不同的拷贝方法,它们之间的区别主要在于拷贝的程度和对原始对象内部结构的影响。

永远在路上 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python 深拷贝和浅拷贝的区别

Python 深拷贝和浅拷贝的区别 深浅拷贝在python中经常使用,其区别的外在表现是: 使用浅拷贝,当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变化。而使用深拷贝时,不会有这种问题。 浅拷贝: # -*- coding: utf-8 -*- # @File : 浅拷贝.py # @Author : Runpeng Zhang # @Date : 2020/2/10 # @...

Rp的博客 4654

python的复制,深拷贝和浅拷贝的区别

python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 >>> b=ali...

zhubaoJay的博客 2万+

C++浅拷贝和深拷贝的区别

先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。 先看一个例子,有一个学生类,数据成员时学生的人数和名字: #include <iostream> using nam...

测试0901-1 9518

【C#】深拷贝和浅拷贝、区别

浅拷贝:只复制值类型字段,引用类型字段只复制引用,使用实现。深拷贝:递归复制所有引用类型字段,创建完全独立的副本,可以通过手动复制或序列化实现。推荐方法:如果对象结构简单,可以手动实现深拷贝。如果对象结构复杂且支持序列化,可以使用序列化方法实现深拷贝。

weixin_44939430的博客 877

深拷贝和浅拷贝的区别和与原理

深拷贝和浅拷贝的区别和与原理

weixin_45753447的博客 1万+

C++深拷贝和浅拷贝的区别

在 C++ 中,浅拷贝和深拷贝是处理对象复制时非常关键的概念,尤其是当对象内部有指针成员指向动态分配的内存时。对于指针成员,浅拷贝只复制指针的值(即内存地址),而不复制指针所指向的数据。这意味着原对象和拷贝对象的指针成员将指向同一块内存地址。选择浅拷贝还是深拷贝取决于具体情况,但在涉及到动态内存管理的场景下,深拷贝通常是必要的,以确保数据的独立性和程序的稳定性。这样,原对象和拷贝对象的指针成员就分别指向不同的内存地址,互不干扰。当一个对象被浅拷贝时,所有的成员变量都会直接复制其值,包括指针类型的成员变量。

宁静致远的博客 1066

深拷贝和浅拷贝区别是什么?

深拷贝和浅拷贝区别是什么? 复制一个 Java 对象 浅拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。 深拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针和堆内存中的对象。 如何实现对象克隆? 【Java面试题与答案】整理推荐 基础与语法 集合...

ConstXiong 2万+
上一篇: JS 性能优化
下一篇: 常见的前端攻击
everyStudy
博客等级 码龄4年 292粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值