当前位置: 首页 > news >正文

16、Python面试题解析:python中的浅拷贝和深拷贝

在 Python 中,浅拷贝(Shallow Copy)深拷贝(Deep Copy) 是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。以下是详细解析:


1. 浅拷贝(Shallow Copy)

浅拷贝会创建一个新对象,但新对象中的子对象是原对象中子对象的引用。
特点

  • 只复制外层对象,嵌套对象(如列表中的列表、字典中的字典)仍与原对象共享。
  • 修改浅拷贝的外层对象不会影响原对象,但修改嵌套对象会同时影响原对象和浅拷贝。
实现方式
  • 使用 copy 模块的 copy() 方法。
  • 对列表使用切片操作 new_list = old_list[:]
  • 对字典使用 dict.copy() 方法。
示例
import copy

original = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original)

# 修改外层对象
shallow_copy.append([7, 8, 9])
print(original)       # [[1, 2, 3], [4, 5, 6]](原对象未改变)
print(shallow_copy)   # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 修改嵌套对象
shallow_copy[0][0] = 100
print(original)       # [[100, 2, 3], [4, 5, 6]](原对象被修改!)
print(shallow_copy)   # [[100, 2, 3], [4, 5, 6], [7, 8, 9]]

2. 深拷贝(Deep Copy)

深拷贝会递归地复制所有嵌套对象,完全独立于原对象。
特点

  • 新对象和原对象的所有层级完全独立,修改任一对象均不会影响另一个。
  • 适用于需要完全隔离的场景,但性能开销较大(尤其是大型嵌套对象)。
实现方式
  • 使用 copy 模块的 deepcopy() 方法。
示例
import copy

original = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original)

# 修改嵌套对象
deep_copy[0][0] = 100
print(original)     # [[1, 2, 3], [4, 5, 6]](原对象未被修改)
print(deep_copy)    # [[100, 2, 3], [4, 5, 6]]

3. 核心区别

特性浅拷贝深拷贝
复制层级仅外层对象递归复制所有嵌套对象
内存占用高(递归复制所有对象)
修改嵌套对象影响原对象不影响原对象
性能慢(尤其是复杂结构)

4. 使用场景

  • 浅拷贝:适用于简单对象(如单层列表、字典),或允许共享嵌套对象的场景。
  • 深拷贝:适用于需要完全独立的复杂嵌套对象(如多层结构、类实例)。

5. 注意事项

  • 不可变对象(如字符串、元组、数字)的拷贝没有实际意义,因为它们不可修改。
  • 自定义对象的拷贝需要实现 __copy__()__deepcopy__() 方法以控制拷贝行为。
  • 嵌套对象中如果包含循环引用(如对象 A 包含对象 B,对象 B 又引用对象 A),深拷贝可能引发递归错误。

6. 总结

  • 浅拷贝是“表层复制”,适合简单场景;深拷贝是“完全独立复制”,适合复杂嵌套场景。
  • 选择拷贝方式时,需根据数据结构和需求权衡性能与独立性。

相关文章:

  • 《Effective Objective-C》阅读笔记(上)
  • 电机控制的空间矢量调制 (SVPWM)
  • openharmony5.0中hdf框架中实现驱动程序的动态加载和管理的技术细节分析
  • C++中tuple的用法
  • Spring Boot 中的日志管理
  • 数据库设计的优化建议
  • AcWing 299 裁剪序列
  • 6种MySQL高可用方案对比分析
  • C语言基本知识------指针(4)
  • springboot004网页时装购物系统(源码+数据库+文档)
  • threejs 安装教程
  • 51单片机测试题AI作答测试(DeepSeek Kimi)
  • w~视觉~合集13
  • Sinusoidal、RoPE和可学习嵌入的详细介绍及它们增强位置感知能力的示例
  • 信而泰CCL仿真:解锁AI算力极限,智算中心网络性能跃升之道
  • 可视化报表
  • 括号配对问题 【刷题反思】
  • DeepSeek AI人工智能该如何学习?
  • 解锁DeepSeek,未来为语音直播交友软件源码开发搭建注入新活力
  • 2.24DFS和BFS刷题
  • “80后”南京大学天文与空间科学学院教授施勇加盟西湖大学
  • 义乌至迪拜“铁海快线+中东快航”首发,物流成本降低18%
  • 六省会共建交通枢纽集群,中部六省离经济“第五极”有多远?
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 新城悦服务:独董许新民辞任,新任独董与另两人组成调查委员会将调查与关联方资金往来
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估