为了账号安全,请及时绑定邮箱和手机立即绑定

数组深拷贝和浅拷贝

数组深拷贝和浅拷贝

一只名叫tom的猫 2018-12-22 15:18:04
//深拷贝var arr1 = [1, 2, 3];var arr2 = arr1.slice();arr1.push(4);console.log(arr2)      //[1, 2, 3]//浅拷贝var arr1 = [{a:1}];var arr2 = arr1.slice();arr1[0].a = 2;console.log(arr2[0].a)          //2同样的方法,一会是深拷贝一会是浅拷贝,对数组来说,深拷贝和浅拷贝得看数组的格式吗?
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

高级语言都是相通的,浅copy指的是arr1, arr身份不同,但是每个项目引用的对象还是同一个,所以当你push的时候,是放到了arr1的地址空间中,而修改{a:1}时,arr1和 arr2都引用了该对象,所以自然就都修改了。


看个python的例子:


a = [1, 2, 3, {'a': 1}]

b = a.copy()


b.append(4)

print(a)  # [1, 2, 3, {'a': 1}]

b[3]['a'] = 5

print(a)  # 1, 2, 3, {'a': 5}]


print(id(a), id(b)) # 2258595680904 2258597356744 a, b 不同对象

print(id(a[3]), id(b[3]))  # 1796950875736 1796950875736 a[3], b[3] 指向同一个字典对象


查看完整回答
反对 回复 2019-01-27
  • 1 回答
  • 0 关注
  • 563 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信