首页 > 其他分享 >故事会【深拷贝和浅拷贝】

故事会【深拷贝和浅拷贝】

时间:2023-06-05 10:04:57浏览次数:36  
标签:小明 鲜花 对象 商店 小红 故事会 拷贝

从前,有一个繁忙的城市。在这个城市里,有两个非常要好的朋友,小明和小红。他们分别经营着自己的商店,小明的商店卖的是水果,小红的商店卖的是鲜花。 一天,小红发现她的鲜花生意非常好,但是她的鲜花不够卖。于是她想到了小明,她认为如果小明的水果店能帮她进货,那么她就能满足更多顾客的需求了。于是,小红找到了小明,希望小明能帮她进货。小明同意了,他把小红店里的鲜花都买了下来,放在自己的水果店里。这样一来,小红的鲜花店就有足够的鲜花来满足顾客的需求了。然而,小明很快发现了一个问题。由于他们的商店是共享的,如果他在水果店里修改了鲜花的价格,那么小红的鲜花店的价格也会改变。这让小明很困扰,因为他并不想影响小红的生意。为了解决这个问题,小明想出了一个好办法。他决定把小红店里的鲜花复制一份,放在自己的店里。这样一来,他们的商店就不再是共享的了,小明可以放心地修改他的水果店里的鲜花价格,而不会影响小红的鲜花店。这就是深拷贝和浅拷贝的故事。深拷贝就像小明的商店一样,它复制了一份原始数据,让两个对象不再共享同一块数据,从而避免了数据的冲突。而浅拷贝就像小明和小红的商店共享同一块数据,当一个对象修改了这块数据,另一个对象的数据也会被修改。现在,小明和小红的商店可以独立运作,各自的生意也越来越好。深拷贝和浅拷贝的故事告诉我们,在编程中,我们也需要像小明和小红一样,学会如何处理数据,避免数据冲突,提高代码的效率。

当我们在编程中处理复杂的数据结构时,我们可能会面临深拷贝和浅拷贝的问题。这是一种当我们需要将一个对象的值复制到另一个对象中时所遇到的问题。

  1. 浅拷贝:浅拷贝只复制对象的引用,而不复制对象的值。换句话说,如果原始对象中的值是另一个对象的引用,那么新对象也会引用这个值。2. 深拷贝:深拷贝会递归地复制对象中的每一个值,无论它是基本类型(如int、float、boolean等)还是引用类型(如对象)。这意味着在深拷贝之后,原始对象和新对象中的每一个值都是独立的,不会互相影响。举个例子,如果我们有一个对象,其中有一个整数和一个字符串,那么如果我们进行浅拷贝,新的对象将只有那个整数,但它仍然会引用原始对象中的字符串。如果我们进行深拷贝,新的对象将会有和原始对象一样的整数和字符串,它们是独立的,不再互相引用。深拷贝和浅拷贝都是通过某种技术实现的。在Python中,我们可以使用内置的copy模块来进行浅拷贝,而在JavaScript中,我们可以使用Object.assign()方法来进行浅拷贝。深拷贝则需要我们自己编写代码来实现。使用深拷贝的原因是,当我们有多个对象共享同一块数据时,如果其中一个对象修改了这块数据,那么另一个对象的数据也会被修改。使用深拷贝可以避免这个问题,因为每个对象都有自己独立的数据。至于优化,我们可以通过优化递归或循环的实现来提高深拷贝或浅拷贝的效率。如果对象的引用类型很少,那么使用浅拷贝可能会更高效,因为它的实现更简单。

标签:小明,鲜花,对象,商店,小红,故事会,拷贝
From: https://blog.51cto.com/liaozhiweiblog/6413217

相关文章

  • 深拷贝,浅拷贝
    浅拷贝:只拷贝基本类型的属性,引用类型的属性将地址付给新对象,所以浅拷贝后修改基本类型属性两个对象不会影响,修改引用类型属性会互相影响.浅拷贝可以用cloneable接口的clone方法实现,也可以用spring的BeanUtils.copyProperties方法实现深拷贝:基本类型和引用类型的属性都是真......
  • 深入剖析Linux IO原理和几种零拷贝机制的实现
    https://www.cnblogs.com/lsgxeva/p/11619464.html来源 https://zhuanlan.zhihu.com/p/83398714零壹技术栈   公众号【零壹技术栈】前言零拷贝(Zero-copy)技术指在计算机执行操作时,CPU不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切......
  • 还在用BeanUtils拷贝对象?MapStruct才是王者!【附源码】
    前几天,远在北京的小伙伴在群里抛出了“MapStruct”的概念。对于只闻其名,未见其人的我来说,决定对其研究一番。本文我们就从MapStruct的概念出发,通过具体的代码示例来研究它的使用情况,最后与“市面上”的其它工具来做个对比!官方介绍首先我们打开MapStruct的官网地址,映入眼帘的就......
  • C++中分别使用左值形参和右值形参的拷贝构造和移动构造
    #include<iostream>classData{public:Data(){std::cout<<"EMPTY."<<std::endl;}Data(constData&d){std::cout<<"lvaluecopy."<<std::endl;}Data(constData&&d){std::cout......
  • 还在用BeanUtils拷贝对象,MapStruct才是yyds | 附源码
    前几天,远在北京的小伙伴在群里抛出了“MapStruct”的概念。对于只闻其名,未见其人的我来说,决定对其研究一番。本文我们就从MapStruct的概念出发,通过具体的代码示例来研究它的使用情况,最后与“市面上”的其它工具来做个对比!官方介绍首先我们打开MapStruct的官网地址,映入眼帘的就......
  • Js 常见数据类型及判断方法及手写深拷贝
    常见值类型:undefined、String、Number、boolean、Symbol.常见 引用类型:Array、Object、function(特殊引用类型,单不用于存储数据,所以 “没有拷贝、复制函数” 这说法)、null(特殊引用类型,指针指向为空地址)判断数据类型的方法:typeof运算符leta;conststring='abc......
  • python numpy 深拷贝 浅拷贝
    importnumpyasnpimportcopya=np.mat("123;456;789")print(a)b=ab[0,0]=0print(a)print(b)print("-"*10)输出结果[[123][456][789]][[023][456][789]][[023][456][789]]----------可以看到直接赋值时改变b同时......
  • 编译器绕过拷贝构造函数和返回值优化
    写在前面:在拷贝初始化(也就是用等号初始化,注意使用拷贝构造函数创建一个新的对象不属于拷贝初始化)过程中,编译器可以(但不是必须)跳过拷贝构造函数或者移动构造函数,直接创建对象。1stringnull_book="999";2//可以改写为3stringnull_book("999");这里面”999“隐式的转换为......
  • java根据文件IO流实现文件拷贝
    代码实现如下1/**2*作用:执行文件夹文件拷贝3*@authorqi4*@paramcopyFile5*@paramcopyToFile6*@returnvoid7**/8publicstaticvoidcopyDir(FilecopyFile,FilecopyToFile)throwsIOException{9......
  • jquery 拷贝对象
    如果想要把某个对象拷贝(合并)给另外一个对象使用,此时可以使用$.extend()方法语法∶$.extend([deep],target,object1,[object])1.deep:如果设为true为深拷贝,默认为false浅拷贝2.target:要拷贝的目标对象3.object1:待拷贝到第一个对象的对象。案例:<!DOCTYPEhtml><htmllang=......