You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何List构造函数无法生成List<T>的深拷贝?

为什么修改List拷贝集合的元素会影响原集合?

核心原因:List的构造函数执行的是浅拷贝

在C#中,自定义类(比如示例里的Book)属于引用类型。这类类型的实例数据存储在托管堆中,而集合里的元素变量(比如books_1[0])实际存储的是指向堆中对象的引用地址。

当你用new List<Book>(books_1)创建新集合时,这个操作只会:

  • 创建一个全新的List容器对象
  • 将原List中每个元素的引用地址复制到新List里

也就是说,books_1[0]和books_2[0]指向的是托管堆里同一个Book对象。

对应你的代码场景

当你执行books_2[0].title = "Five"时,代码逻辑是:

  1. 通过books_2[0]拿到堆中Book对象的引用地址
  2. 找到该地址对应的Book对象,修改它的title属性值
  3. 由于books_1[0]也指向同一个Book对象,所以访问books_1[0].title时,看到的就是修改后的值

如果想要让两个集合完全独立,需要实现深拷贝:不仅复制List容器,还要为每个元素创建全新的对象实例,让新List的元素指向这些新对象。


内容的提问来源于stack exchange,提问作者Tomi Tsolov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:06:28