Skip to content

根据你提供的这份《平安银行 软件测试面试记录》,图中第14个问题是:

14. 了解浅拷贝和深拷贝

以下是这个问题的详细参考答案,适合在面试中回答:

核心区别(一句话版)

浅拷贝只复制对象本身,内部的子对象仍是原对象的引用;深拷贝会递归复制所有子对象,生成完全独立的新对象。


详细解释(Python 为例)

1. 浅拷贝 (Shallow Copy)

  • 创建一个新对象,但新对象内部的元素是原对象中元素的引用
  • 如果原对象中有可变对象(如列表、字典),修改这个可变对象会影响拷贝后的对象
python
import copy

original = [1, 2, [3, 4]]
shallow = copy.copy(original)

# 修改外层不可变元素(不影响原对象)


<NolebasePageProperties />




shallow[0] = 100
print(original[0])  # 1 (不变)

# 修改内层可变列表(会影响原对象)
shallow[2][0] = 999
print(original[2])  # [999, 4] (被改变了!)

2. 深拷贝 (Deep Copy)

  • 递归地复制对象及其所有子对象,生成完全独立的新对象
  • 修改拷贝后的任何内容都不会影响原对象
python
import copy

original = [1, 2, [3, 4]]
deep = copy.deepcopy(original)

# 修改内层可变列表(不会影响原对象)
deep[2][0] = 999
print(original[2])  # [3, 4] (不变)
print(deep[2])      # [999, 4]

对比表格

特性浅拷贝深拷贝
复制层级只复制最外层递归复制所有层级
内存占用
速度
独立程度子对象仍共享完全独立
适用场景对象结构简单、只包含不可变对象需要完全独立副本、修改不应影响原对象

常见实现方式

浅拷贝:

  • copy.copy()
  • 列表切片 new_list = old_list[:]
  • 列表构造器 list(old_list)

深拷贝:

  • copy.deepcopy()

面试加分点(可选)

“在实际项目中,深拷贝需要注意循环引用问题,Python 的 deepcopy 内部通过 memo 字典处理了这种情况。另外,深拷贝对性能有较大影响,如果对象层级很深或数据量很大,建议评估是否真的需要完全独立副本。”


总结回答模板

“浅拷贝只复制对象的第一层,内部的子对象还是共享引用;深拷贝则递归复制所有层级,生成完全独立的副本。Python 中可以用 copy 模块的 copy()deepcopy() 来实现。如果对象只包含不可变类型,浅拷贝就够用了;但如果包含嵌套的可变对象,并且希望修改不影响原对象,就需要用深拷贝。”

希望这个回答对你有帮助!面试时可以结合自己的项目经历举例说明,效果更好。

贡献者

The avatar of contributor named as freeway348 freeway348

文件历史

撰写