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

深拷贝与浅拷贝

时间:2024-03-01 14:45:28浏览次数:17  
标签:对象 原始 引用 拷贝 属性 赋值

深拷贝与浅拷贝

深拷贝

对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用

点击查看MDN官网解释

即深拷贝是值的拷贝,拷贝后的对象与源对象完全独立,互不影响

浅拷贝

对象的浅拷贝是其属性与其拷贝的源对象的属性共享引用 --MDN

点击查看MDN官网解释

即深拷贝是值的地址的拷贝(针对引用类型),拷贝后的对象与源对象会相互影响
浅拷贝:展开语法(...操作符)、数组的一些API(concatslicefrom)、对象的一些API(assigncreate

浅拷贝与直接赋值的区别

直接赋值:
当你直接赋值一个对象或数组时,你实际上是在复制这个对象的引用,而不是对象本身。这意味着原始对象和新对象将指向内存中的同一个位置。因此,对任何一个对象的修改都会影响到另一个对象。
浅拷贝:
浅拷贝则是创建一个新对象,并复制原始对象的所有非静态属性到新对象,同时将这些属性指向原始对象中的相同位置(即复制的是引用,而不是实际的对象)。因此,如果原始对象中的属性值是一个引用类型(如对象或数组),那么新对象和原始对象将共享这个引用。

总结:
直接赋值:复制的是对象的引用,原始对象和新对象指向同一个内存位置。
浅拷贝:创建一个新对象,并复制原始对象的所有非静态属性到新对象。如果属性值是引用类型,则新对象和原始对象将共享这个引用
例如:

// 直接赋值
const orging1 = {
  a: 1,
  b: {
    c: 2
  }
}
const tar1 = orging1
tar1.a = 2 // orging.a = 2
tar1.b.c = 3 // orging.b.c = 3
// 浅拷贝
const orging2 = {
  a: 1,
  b: {
    c: 2
  }
}

const tar2 = Object.assign({}, orging2)
tar2.a = 2 // orging.a = 1
tar2.b.c = 3 // orging.b.c = 3

标签:对象,原始,引用,拷贝,属性,赋值
From: https://www.cnblogs.com/my-wl/p/18047028

相关文章

  • 多线程文件拷贝
    多线程文件拷贝#include<stdio.h>#include<pthread.h>#include<unistd.h>#include<stdlib.h>#include<assert.h>#include<sys/mman.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#inclu......
  • python 的深浅拷贝
    python的深浅拷贝在Python中,深拷贝(deepcopy)和浅拷贝(shallowcopy)是用于复制数据结构(如列表或字典)的两种不同方式,它们有以下区别:浅拷贝(ShallowCopy):浅拷贝创建一个新的对象,然后将原始对象中的元素(如果是可变对象)复制到新对象中。但是,如果元素本身也是一个可变对象,则新对象中的......
  • 多进程拷贝数据文件
    多进程拷贝数据#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/mman.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h>#include<string.h>intmmap_mamcpy(char**argv){......
  • 零拷贝,mmap 和 sendFile
    传统的IOmmapmmap是一种内存映射技术,mmap相比于传统的IO来说,其实就是少了1次CPU拷贝而已,上图。sendFile在Linux中,提供sendFile函数,实现了零拷贝......
  • java实现scp功能实现目录下所有文件拷贝至指定服务器
    1、添加pom依赖<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>2、示例代码publicstaticvoidmain(String[]args)throwsIOException{try{......
  • C++ 拷贝构造函数简单测试
    浅拷贝静态数组的空间体现深拷贝的效果#include<iostream>#include<string>usingnamespacestd;#defineSEX_SIZE10classStudent{public:Student(stringname){Age=10;Name=newstring(name);strcpy(Sex,"男");......
  • 文件自动拷贝到桌面及设置桌面显示此电脑
    uname="$env:USERPROFILE"$uname=$uname.Substring($uname.length-8)$checkpath=test-path\\xx.xx.xxx.xxx\xx\xx\*.lnkif($checkpath-eq"True"){copy-item\\xx.xx.xxx.xxx\xx\xx\*.*-destination\\xxx\xx$\$uname......
  • 在k8S中,如何实现Pod中容器的文件和宿主机之间相互拷贝?
    在Kubernetes(k8S)中,要实现Pod中容器的文件与宿主机之间的相互拷贝,可以使用kubectlcp命令。以下是具体的命令格式和用法:从Pod中复制文件到本地(宿主机):kubectlcp[NAMESPACE/]POD:CONTAINER_PATHLOCAL_FILEPATH例如,将名为my-pod的Pod中,容器内的/path/to/file-i......
  • STL的深浅拷贝问题
    STL的深浅拷贝问题​ STL容器所提供的都是值(value)寓意,而非引用(reference)寓意,也就是说当我们给容器中插入元素的时候,容器内部实施了拷贝动作,将我们要插入的元素再另行拷贝一份放入到容器中,而不是将原数据元素直接放进容器中,也就是说我们提供的元素必须能够被拷贝。#define_C......
  • 最简单的深拷贝和浅拷贝(原理)
    拷贝:其实就是一个对象复制给另外一整个对象,让对象相互不影响。对象的拷贝又分为浅拷贝和深拷贝对象的浅拷贝:浅拷贝是指只复制对象的第一层属性,如果对象的属性值是引用类型(如对象、数组等),则复制的是引用,而不是真正的拷贝。对象的深拷贝:深拷贝是指在复制对象时,不仅复制对象本身,还......