ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

漫画|有趣的了解一下赋值、深浅拷贝

2022-01-27 21:34:21  阅读:260  来源: 互联网

标签:name variable 漫画 拷贝 标识符 传值 赋值


 什么是赋值?

将某一数值赋给某个变量的过程,称为赋值。将确定的数值赋给变量的语句叫做赋值语句。所赋“值”可以是数字,也可以是字符串和表达式等。

 赋值标识符

简单的赋值,都是由'='表示。复合赋值使用'/'、'+'、'-'后面跟'='表示。这些赋值标识符,也是常说的“简写样式”。

 每个数学赋值标识符都是独一无二的:

 

 

 

    • +=(加)
    • -=(减)
    •  *=(乘)
    • /=(除)
    • %=(取余)
    • <<=(左移)
    • >>=(右移)
    • >>>=(无符号又移)

(注意,数学赋值标识符只有简写作用,无提升性能作用)

传值和传址

赋值包含了传值和传址两种赋值方式。传值是基本数据的赋值方式,因为基本数据的值存放于栈中。传值是引用数据的赋值方式,因为引用数据的值存放在堆中。

 (上图为基本数据赋值传值方式,基本数据类型:stringnumberbooleanundefinednullsymbol。

 

 (上图为引用数据赋值是传址的方式,由于引用数据的值只是指针指向同一堆地址,如果操作其中一个,其余都会被联动。)

 

 (为variable name偷偷添加一个symbol。天呐variable name2居然也能调用!!!)

 

variable name生气了怎么办呢?

拷贝

为解决该问题,就需要使用到拷贝。  也可以理解为只有在是引用性数据类型时,才用到深浅拷贝。

浅拷贝

先分析一下浅拷贝是否可用。浅拷贝:回先创建一个新的对象,该对象有原始值的精确拷贝,但是属性值的拷贝是通过赋值来完成的。 也就会有传说中的“只拷贝表面上的”一层。如果修改的是复杂类型值本身,还是会相互影响。

 

这不行,不符合 variable name的需求!

深拷贝

啊哦,浅拷贝并不能完全满足variable name不想让variable name2拿到它新收集到的数据。或许我们需要看看其他方法:深拷贝。

 

 

 

 

(上图为深拷贝后的数据存放图)

深拷贝后,会拷贝所有的属性,并将拷贝属性指向的动态分配的内存。深拷贝会另外创建一个一模一样的堆,新对象和原对象不共享堆内存。所以修改对象的值,也不会相互影响。当对象和它所引用的对象一起拷贝时即发生深拷贝。可以使用递归、JSON.parse()与JSON.stringify()测试查看效果。

 

尝试一下,用深拷贝来完成variable name的需求:

 

完全可以!!! 

 

 

(注意,文章图中箭头方向不代表指针方向!!variable name以及variable name2只是代表变量名的英文!!)

标签:name,variable,漫画,拷贝,标识符,传值,赋值
来源: https://www.cnblogs.com/naitang/p/15846115.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有