把一个数组赋值给另一个数组
JavaScript把一个数组赋值给另一个数组
把数组map的内容全部赋值给另一个数组a,当一个数组a改变的时候,map也发生了变化,该如何解决?
var map = new Array("china","america","japan","canada");
var a = map;
a.unshift("aa");
console.log(a);
console.log(map);
// a 结果[ "aa", "china", "america", "japan", "canada" ]
//map结果[ "aa", "china", "america", "japan", "canada" ]
改变数组a,原来的数组map也发生了变化。这是因为JavaScript存储对象时存储的是地址,var a = map浅拷贝导致 map 和 a 指向同一块内存地址,所以产生这样的现象。
解决方法:深拷贝(slice、concat)
var map = new Array("china","america","japan","canada");
var a = [].concat(map);//或者a = map.slice(0)效果相同
a.unshift("aa");
console.log(a);
console.log(map);
// a 结果[ "aa", "china", "america", "japan", "canada" ]
//map结果[ "china", "america", "japan", "canada" ]
python把一个数组赋值给另一个数组
注:python中数组一般指list(列表)类型。
两个列表list1和list2,直接用等号赋值,list2修改后,list1也会被修改。
list1 = ['zz','age','6']
list2 = list1
list2[0] = 't'
print(f'list1:{list1}\nlist2:{list2}')
运行结果:
list1:[‘t’, ‘age’, ‘6’]
list2:[‘t’, ‘age’, ‘6’]
想要不改变原列表,使用[:]
或者.copy()
list1 = ['zz','age','6']
list2 = list1[:] #list1.copy()有同样效果
list2[0] = 't'
print(f'list1:{list1}\nlist2:{list2}')
运行结果:
list1:[‘zz’, ‘age’, ‘6’]
list2:[‘t’, ‘age’, ‘6’]