【 js 基础 】 深浅拷贝】的更多相关文章

一.了解 基本数据类型保存在栈内存中,按值访问,引用数据类型保存在堆内存中,按址访问. 二.浅拷贝 浅拷贝只是复制了指向某个对象的指针,而不是复制对象本身,新旧对象其实是同一内存地址的数据,修改其中一个值,另一个也会动态改变. 三.深拷贝 深拷贝是真正意义上实现了数组和对象的拷贝,它创建了另外一个一模一样的对象,和原对象不是一个内存地址,修改一个值不会影响另一个的值. 使用JSON.stringify()和JSON.parse()也可以实现深拷贝.当值为undefined.任意函数.symbol…
一方面感觉实在无趣,不知道做什么了,纯粹来个打字练习,于是有了这个. 二方面深感自己C#基础之薄弱,于是对着园友的文章一边看,一边练习,因为很多次看了,没有多久就忘了,还有练习过程中会出现一些问题,这些问题往往是自己最容易忽视的,还有可以举一反三,引申一些其他知识点,于是有了这个. 浅拷贝代码 public class Room { public int _maxSeat; public string _address; public Room(int maxSeat,string addres…
拷贝是音译的词,其实他是从copy这个英文单词音译过来的,那什么是copy? copy其实就是复制一份,也就是所谓的抄一份.深浅copy其实就是完全复制一份,和部分复制一份的意思. 1.赋值运算 l1 = [,,,['barry','alex']] l2 = l1 l1[] = print(l1) # [, , , ['barry', 'alex']] print(l2) # [, , , ['barry', 'alex']] l1[][] = 'wusir' print(l1) # [, ,…
项目中根据各种需求或多或少会需要用到拷贝,通过查询整理之后今天简单的记录一下. 我们可以利用 slice.concat 返回一个新数组的特性可以实现数组的拷贝. var arr = ['a', 1, true, null, undefined]; var new_arr = arr.concat(); console.log(arr) // ["a", 1, true, null, undefined] console.log(new_arr) // ["a", 1…
有一段时间没有更新博客了,忙于工作.2018年刚过去,今天来开启2018第一篇博文.好了,咱们步入正题. 先上代码 /** * 遍历对象 * 1.判断是不是原始值 * 2.判断是数组还是对象 * 3.建立相应的数组或对象 * 递归 */ var obj= { name:"aaa", age:23, hobby:["basketball","music","coding"], lover:{ name:"aaa&quo…
1.实现浅拷贝 // 1. ...实现 let copy1 = {...{x:1}} // 2. Object.assign实现 let copy2 = Object.assign({}, {x:1}) 2. 实现深拷贝 // 1. JOSN.stringify()/JSON.parse() let obj = {a: 1, b: {x: 3}} JSON.parse(JSON.stringify(obj)) // 2. 递归拷贝 function deepClone(obj) { let co…
深拷贝与浅拷贝 总结: # 浅拷贝:list dict: 嵌套的可变数据类型是同一个 # 深拷贝:list dict: 嵌套的不可变数据类型彼此独立 浅拷贝 # 个人理解: # 在内存中重新创建一个空间(所以内存地址不同), # 内存地址延用之前的,所以列表内每个元素的内存地址相同, # 修改数据:如列表内元素为不可变类型,修改后,相当于修改了内存地址指向,拷贝的用的是之前的内存地址,所以两个列表同一位置,数据不同 # 如列表内元素为可变类型,两个列表id相同,修改后,id依然不变,所以,列表内…
一.复习导论(数据类型相关) 想掌握JS的深浅拷贝,首先来回顾一下JS的数据类型,JS中数据类型分为基本数据类型和引用数据类型. 基本数据类型是指存放在栈中的简单数据段,数据大小确定,内存空间大小可以分配,它们是直接按值存放的,所以可以直接按值访问.包含Number.String.Boolean.null.undefined .Symbol.bigInt. 引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针,这个指针指向堆内存中的引用地址.除了上面的 7 种基本数据类型外,剩下…
JS变量分为基本类型和引用类型 基本类型数据包括Number, String, Boolean, Null, Undefined五种类型: 引用数据类型包括Array, Date, RegExp, Function等, 统称为Object类型. JS变量的存储方式 基本类型变量存储在内存的栈中,栈内分别存储着变量的标识符和变量的值. var num1 = 3;var num2 = 5; 引用类型变量存储在内存的堆中,存储结构如下 var person = { name: "tom",…
深浅拷贝知识在我们的日常开发中还算是用的比较多,但是之前的状态一直都是只曾听闻,未曾使用(其实用了只是自己没有意识到),所以今天来跟大家聊一聊js的深浅拷贝: 首先我们来了解一下javascript的数据类型,在ES5版本的js中我们的javascript一共有6种数据类型,分别是: Number(数值型).String(字符串).Boolean(布尔型).Object(对象,object和array都属于Object类型).null.undefined 我们日常使用的javascript深浅拷…
underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: // Create a (shallow-cloned) duplicate of an object. // 对象的 `浅复制` 副本 // 注意点:所有嵌套的对象或者数组都会跟原对象用同一个引用 // 所以是为浅复制,而不是深度克隆 _.clone = function(obj) { // 容…
underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: // Create a (shallow-cloned) duplicate of an object. // 对象的 `浅复制` 副本 // 注意点:所有嵌套的对象或者数组都会跟原对象用同一个引用 // 所以是为浅复制,而不是深度克隆 _.clone = function(obj) { // 容…
js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用JSON.stringify()把json转换成string,然后再用JSON.parse()转换成json数据 缺点:JSON.parse和JSON.stringify只支持IE9+以上 解决这个问题可以使用深度比那里拷贝方法 js 中内存分配问题(堆和栈) js中基本类型类型一般是存储在栈中的.…
内容概要: 数据类型操作补充 集合及其操作 深浅拷贝1.基础数据类型补充 1.1字符串的操作补充li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]s = "_".join(li) # 添加后列表变成字符串print(type(s),s) li = "黄花大闺女"s = "_".join(li) # 仍然是字符串print(type(s),s) 1.2列…
js中的深浅拷贝 js中有深拷贝.浅拷贝一说,所谓的深浅拷贝是针对value类型为引用类型(函数.对象.数组)而言的,大概理解的就是: 浅拷贝: 拷贝出的对象c和原始对象o,c和o在key对应的value为引用类型时,其指向同一块内存地址,修改一个必然影响另一个. 举个浅拷贝的例子: var shallowCopy = function (src) { var dst = {} for (const key in src) { if (src.hasOwnProperty(key)) { dst…
深浅拷贝 在研究Python的深浅拷贝区别前需要先弄清楚以下的一些基础概念: 变量--引用--对象(可变对象,不可变对象) 切片(序列化对象)--拷贝(深拷贝,浅拷贝) 我是铺垫~ 一.[变量--引用--对象]: Python中一切皆对象,甚至连type本身都是type对象. >>> type(type(n1)) < >>> a = 3 >>> b = a >>> id(a);id(b) 1627390480 162739048…
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷⻉ " ".join方法 循环删除列表中的内容:   错误的  原因:在for循环中,循环到第一个,然后删除,删除之后第二个元素向前挪一位,循环指针向后移一位,再删除,结果会导致22,44没删除掉. 只有这样才是可以的: 注意: 由于删除元素会导致元素索引发生变化,所以删除元素是,尽量不要在原来的地方删除,尽量创建一个新的 然后去批量删除 dict中的fronkey()可以帮我们通过list  创建一个dict 前⾯列表中…
本节主要内容:1. 基础数据类型补充2. set集合3. 深浅拷贝主要内容:一. 基础数据类型补充首先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的自己看一看就可以了.我们补充给一个字符串基本操作 li = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"] s = "_".join(li) print(s) li = "黄花大闺女" s = "_&q…
1. 基础数据类型补充 li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"] s = "_".join(li) print(s) li = "⻩花⼤闺⼥" s = "_".join(li) print(s) 列表: 循环删除列表中的每⼀个元素 li = [11, 22, 33, 44] for e in li: li.remove(e) print(li…
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文件, 一个模块, 一个函数 ,一个类,一个终端的每一行就是代码块 ​ 代码块的关系:如果在同一个代码块中,默认的整数和字符串还有布尔值都会进行缓存 #在python中是用字典的方式存储 a=1 b=1 print(globals()) #函数会以字典类型返回当前位置的全部全局变量. 驻留机制: in…
一  对字符串的操作 li = ["张曼玉", "朱茵", "关之琳", "刘嘉玲"] s = "_".join(li) print(s) # 张曼玉_朱茵_关之琳_刘嘉玲 li = "哈哈哥" s = "_".join(li) print(s) # 哈_哈_哥 ####### 经过 join() 处理之后 就会变成字符串 li = "哈哈哥,嘻嘻姐,呵呵妹…
一.js 数据类型 javaScritp的数据类型有:数值类型.字符串类型.布尔类型.null.undefined.对象(数组.正则表达式.日期.函数),大致分成两种:基本数据类型和引用数据类型, 其中:    (1)基本数据类型:数值.字符串.布尔.null.undefined (值类型) (2)复杂(复合)数据类型:对象 (引用类型) 基本数据类型保存在栈内存,引用类型保存在堆内存中.根本原因在于保存在栈内存的必须是大小固定的数据,引用类型的大小不固定,只能保存在堆内存中,但是可以把它的地址…
一.基础数据类型补充 1. "拼接字符串".join(可迭代对象) 可迭代对象为列表时,输出列表元素与拼接字符串的拼接 li = ['张三', '李四', '王五', '赵四'] s = '_'.join(li) print(s)输出:张三_李四_王五_赵四 可迭代对象为字符串时,输出单个字符与拼接字符串的拼接 li = 'asdfgh' s = '_'.join(li) print(s)输出:a_s_d_f_g_h 2.列表与字典的删除补充 列表和字典在迭代过程中无法进行删除操作,需…
在实际开发中遇到过太多次深拷贝浅拷贝的问题.总结一下~ JS数据存储和深浅拷贝实际运用① 这是之前写过的一篇文章,解决浅拷贝深拷贝的问题只说了一种方法,今天来补充一下. 介绍深拷贝和浅拷贝都在上一篇文章里介绍过了,在上一篇文章里只写了一个针对于数组的一种深拷贝,今天总结一下 js中对象和数组的深浅拷贝.具体的场景已经在上一篇文章里说明了. 这里废话一下上一篇文章中出现的问题:一个表格数据,可以点击编辑弹出表单数据,修改数据后点击取消或者关闭表单时,表格的数据会变空,解决的思路就是当我点击表单显示…
基础数据类型汇总: #!/usr/bin/env python # -*- coding:utf-8 -*- ''' str int ''' # str s = ' a' print(s.isspace()) ''' list: ''' li_st = [11, 22, 33, 44, 55] for i in range(len(li_st)): # range()也是顾头不顾尾 del li_st[i] #del操作会更新列表 删掉所有偶数 for i in li_st: if i % 2…
##################################### 预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象. 对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身. 引用语义:在python中,变量保存的是对象(值)的引用…
基本数据类型和引用数据类型 JS数据分为基本数据类型和引用数据类型.基本数据类型的变量存储在栈中,引用数据类型则存储在堆中,引用数据类型的存储地址则保存在栈中. 下面来看一个小例子 // 基本数据类型 let intType = 1; console.log('初始intType:' + intType); let copyIntType = intType; copyIntType = 2; console.log('更改后intType:' + intType); console.log('…
深浅拷贝 1. import  copy#浅拷贝copy.copy()#深拷贝copy.deepcopy()#赋值 = 2.   对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 对于 字典.元组.列表 而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. 浅拷贝,在内存中只额外创建第一层数据. 深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:Python内部对字符串和数字的优化)   import copy n1 = {"k1":&…
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 ######### 3 n1 = 123 4 # n1 = "i am alex age 10" 5 print(id(n1)) 6 # ## 赋值 ## 7 n2 = n1 8 print(id(n2)) 9 # ## 浅拷贝 ## 10 n2 = copy.copy(n1) 11 print(…
三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不成立,将值2赋给result变量 eg:name = "tina" if 1==1 else "fei" name = "tina" if 1!=1 else "fei" print(name) 执行结果如下: fei  小练习:…