//深拷贝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] 指向同一个字典对象
添加回答
举报
0/150
提交
取消