深拷贝和浅拷贝的核心区别在于是否递归复制嵌套对象:浅拷贝仅复制顶层容器,嵌套可变对象仍共享引用,修改会相互影响;深拷贝递归复制所有层级,新旧对象完全隔离。

深拷贝和浅拷贝的核心区别在于“是否递归复制嵌套对象”。不是看复制了没,而是看复制后改内部数据会不会互相影响。
复制范围不同
浅拷贝只创建新容器,但容器里的可变子对象(比如列表中的列表、字典里的列表)仍是原引用——改子对象,两边都变。
深拷贝会一层层往下,把所有嵌套的可变对象也全复制一份,新旧对象彻底隔离。
常用实现方式
浅拷贝:
• copy.copy()
• 列表切片 list[:] 或 list.copy()
• 字典的 dict.copy() 或 dict(dict_obj)
深拷贝:
• 唯一推荐: copy.deepcopy()
• 不可靠替代(有严重限制): json.loads(json.dumps(obj))(不支持函数、datetime、自定义类等)
性能与内存开销
浅拷贝快、省内存,适合只读或仅需顶层隔离的场景。
深拷贝慢、占内存,尤其对深层嵌套或大体积对象,但换来的是数据安全——改副本绝不会波及原始数据。
哪些情况其实不用深拷贝
• 所有元素都是不可变类型(如 [1, "a", (2, 3)]),浅拷贝就足够独立。
• 原始对象本身不含嵌套可变结构,例如纯一维列表或简单字典。
• 明确需要共享某些子对象(比如多个配置项共用一个默认参数字典)。











