猿问

数组深拷贝和浅拷贝

//深拷贝

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

同样的方法,一会是深拷贝一会是浅拷贝,对数组来说,深拷贝和浅拷贝得看数组的格式吗?

一只名叫tom的猫
浏览 564回答 1
1回答

蝴蝶刀刀

高级语言都是相通的,浅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'] = 5print(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] 指向同一个字典对象
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答