深拷贝和浅拷贝
了解深拷贝和浅拷贝之前,要先了解基本类型和引用类型
基本类型:直接存储在栈中的数据,例如:字符串、布尔值、未定义、数字、null(null只是一个空指针对象,没有数据)。
引用类型:将该对象引用地址存储在栈中,然后对象里面的数据存放在堆中,例如:数组、对象、函数。
深拷贝,浅拷贝,从名字很清楚就是复制,创建副本。这里我举个栗子🌰:假设有对象PeopleA,PeopleA对象有两个属性:age(基本类型)、hobbies(引用类型)。这里我拷贝一下PeopleA会得到PeopleB,PeopleB也应有age、hobbies属性,对于基本类型的age无疑是完成了复制,将值复制了一份,但是对于引用类型的hobbies来说,拷贝就有了两层意义:
第一层:hobbies拷贝只是将PeopleA的hobbies引用的地址拷贝了一份给PeopleB,看上去效果是一样的,叨叨了拷贝的效果,但是其实PeopleA和PeopleB的hobbies属性引用的是一个地址,也就是说当我们对PeopleB的hobbies属性进行操作,这个操作也会影响PeopleA,这就是所说的浅拷贝。
第二层:hobbies拷贝是将PeopleA的hobbies的所指对象拷贝一份,将拷贝出的那份对象的地址给PeopleB,这样对PeopleB的操作不会影响到PelpleA,因为PeopleB的hobbies指向的是PeopleA拷贝出来的hobbies,这就是所说的深拷贝。