请教浅复制与深度复制的一个问题

智商无下限 2010-02-23 09:06:17
是不是浅复制所占的内存空间比深度复制少?
比如
object a ; object b;
假设 a的大小为 100M
如果 b=a;这样赋值的话,虽然也创建了b,但两个实例实质只占用了a的空间。 记 a,b的空间总和为 100M。
如果是
b = a.Clone();
则会占用 100M+100M的空间。
请问各位高手事实上是这样的吗?
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
-汪帆- 2010-02-24
  • 打赏
  • 举报
回复
楼主的理解是正确的,不过忽略了一点:a,b,c...引用(变量)本身也是占内存的,它们的内存空间在栈里面。
智商无下限 2010-02-24
  • 打赏
  • 举报
回复
兔子-顾问 2010-02-24
  • 打赏
  • 举报
回复
浅表复制,是复制引用。深度复制是复制值。是的,你理解的对的。
bmwsl 2010-02-24
  • 打赏
  • 举报
回复
智商无下限智商无下限智商无下限智商无下限
智商无下限 2010-02-23
  • 打赏
  • 举报
回复
楼上两位的意思是
如果是 b=a 的这种赋值方式是不会增加内存开销的是吗?
如果 我同时又 c=a ,d=a.... 实际上也是相当于只占用了a本身数据的内存空间大小。
孤剑 2010-02-23
  • 打赏
  • 举报
回复
b = a.Clone();
这个不一定是 100 + 100M 简单,要看 clone 的具体实现,可以实现为深拷贝也可以是浅拷贝。

不过对于深浅拷贝的理解,差不多,浅拷贝就是无论多少对象都指向同一个内存地址,而深拷贝就是将原有对象进行复制,生成新的对象。

wuyq11 2010-02-23
  • 打赏
  • 举报
回复
浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原是对象中,也就是说原始对象中对应的字段也会发生变化。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧