面试题答案
一键面试在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
中的对应部分也被修改了。这是因为浅拷贝只复制了顶层的引用,嵌套的可变对象在原始对象和浅拷贝对象中是共享的。而深拷贝会递归地复制所有嵌套的可变对象,确保新对象和原始对象在任何层次上都相互独立,修改新对象不会影响原始对象。