深浅拷贝有什么区别

宿世情人 1个月前 已收到4个回答 举报

衣上酒痕 4星

共回答了494个问题采纳率:98.7% 评论

1. 内存空间不同:浅拷贝只会复制原始数据结构中的基本类型数据和地址,而不会创建新的内存空间;而深拷贝则会逐级复制原始数据结构中的所有子元素,并且每个子元素都分配了新的内存空间。

2. 子元素赋值不同:浅拷贝对于原始数据结构中的子元素,只能够复制其引用地址,也就是说多个实例共享相同的子元素,因此对于其中一个实例所做出的修改,也会影响到其他实例;而深拷贝则可以复制所有子元素的值或者引用地址(视情况而定),并保证每一个实例都具有完全相同但独立的内容。

3. 实现方式不同:浅拷贝通常只需要将原始数据结构中各元素的地址赋给新建实例中相应位置即可;而深拷贝需要遍历整个原始数据结构,并为其中每个子元素都分配一个新的内存空间,并将其复制到新建实例中相应位置。

16小时前

34

珴粜儛働 3星

共回答了373个问题 评论

浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 。

深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象。

区别:浅拷贝基本类型之前互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象;深拷贝

改变新对象不会影响原对象,他们之前互不影响。

14小时前

45

海枯聲音 2星

共回答了86个问题 评论

1、浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,而深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变。

11小时前

13

日奈森艾克 1星

共回答了170个问题 评论

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

7小时前

29
可能相似的问题

热门问题推荐

Copyright © 2024 微短问答 All rights reserved. 粤ICP备2021119249号 站务邮箱 service@wdace.com