MST

星途 面试题库

面试题:Python 字典深拷贝在复杂嵌套结构下的应用

假设有一个多层嵌套的字典结构,如 {'a': [1, {'b': 2}, 3], 'c': {'d': {'e': 4}} },请使用深拷贝创建一个新的字典,并解释为什么在这种情况下深拷贝是必要的,若使用浅拷贝会引发什么问题。
18.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

在Python中,可以使用copy模块的deepcopy函数来实现深拷贝。示例代码如下:

import copy

original_dict = {'a': [1, {'b': 2}, 3], 'c': {'d': {'e': 4}}}
new_dict = copy.deepcopy(original_dict)

深拷贝的必要性

在多层嵌套的字典结构中,深拷贝是必要的,因为这种结构包含了可变对象(如列表和字典)的嵌套。浅拷贝只会复制顶层对象的引用,而不会递归地复制嵌套的可变对象。这意味着如果对浅拷贝后的对象的嵌套可变对象进行修改,会影响到原始对象。

浅拷贝引发的问题

如果使用浅拷贝(如copy.copy),示例代码如下:

import copy

original_dict = {'a': [1, {'b': 2}, 3], 'c': {'d': {'e': 4}}}
shallow_copied_dict = copy.copy(original_dict)

# 修改浅拷贝后的对象的嵌套可变对象
shallow_copied_dict['a'][1]['b'] = 20

print(original_dict)  
print(shallow_copied_dict) 

上述代码中,修改浅拷贝后的shallow_copied_dict中嵌套的字典,会发现original_dict中的对应部分也被修改了。这是因为浅拷贝只复制了顶层的引用,嵌套的可变对象在原始对象和浅拷贝对象中是共享的。而深拷贝会递归地复制所有嵌套的可变对象,确保新对象和原始对象在任何层次上都相互独立,修改新对象不会影响原始对象。