深拷贝和浅拷贝的区别

深拷贝和浅拷贝的区别

浅拷贝:假设有A数组,B复制了A数组,当A数组改变,B数组也改变,说明是浅拷贝
深拷贝:假设有A数组,B复制了A数组,当A数组改变,B数组没改变,说明是深拷贝

let a = [0,1,2,3,4], b=a
console.log(a===b)  // true 说明拷贝成功
a[0] = 1
console.log(a,b) // [1,1,2,3,4]   [1,1,2,3,4]

a改变了b也改变,说明这是一个浅拷贝,为什么会是一个浅拷贝呢?因为a是一个引用数据类型,我们都知道数据类型可以分为两大类,基本数据类型和引用数据类型。

在基本数据类型中,key和value都是存在栈内存中 例如 let a = 1

keyval
a1

当我用b = a进行拷贝时,栈内存会开辟一个新的内存

keyval
a1
b1

所以即便此时我将a改成2,b也不会受到影响,这就是深拷贝

在引用数据类型中,key存在栈内存中,value存在堆内存中,但是栈内存会提供一个引用的地址指向堆内存的值
栈内存

keyval
a堆地址1

堆内存

keyval
堆地址1[1,2,3,4]

当b = a拷贝时,实际上拷贝的是a的堆地址1,而不是里面的值

keyval
a堆地址1
b堆地址1

所以当对a[0] = 1进行修改时,b因为跟a用的是同一个地址,所以b也会跟着修改,这就是浅拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值