MST

星途 面试题库

面试题:Python 中字典浅拷贝的实现及特性

请用代码示例说明如何对一个字典进行浅拷贝,并阐述浅拷贝后原字典和新字典在嵌套结构修改时会出现什么情况。
20.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

1. 对字典进行浅拷贝的代码示例

在Python中,可以使用dict.copy()方法或者copy.copy()函数来进行浅拷贝。以下是示例代码:

import copy

original_dict = {
    'a': 1,
    'b': {'sub_key':'sub_value'}
}

# 使用 dict.copy() 方法
shallow_copied_dict1 = original_dict.copy()

# 使用 copy.copy() 函数
shallow_copied_dict2 = copy.copy(original_dict)

print(shallow_copied_dict1)
print(shallow_copied_dict2)

2. 浅拷贝后原字典和新字典在嵌套结构修改时的情况

浅拷贝只会复制字典的第一层,对于嵌套的可变对象(如字典、列表等),新字典和原字典会共享这些嵌套对象的引用。当修改嵌套结构时,原字典和浅拷贝后的新字典都会受到影响。示例如下:

import copy

original_dict = {
    'a': 1,
    'b': {'sub_key':'sub_value'}
}

shallow_copied_dict = original_dict.copy()

# 修改浅拷贝字典的嵌套字典
shallow_copied_dict['b']['sub_key'] = 'new_sub_value'

print(original_dict)  
print(shallow_copied_dict) 

上述代码中,修改shallow_copied_dict中嵌套字典'b'的值,original_dict中对应的嵌套字典值也会改变,因为它们共享这个嵌套字典的引用。但如果修改顶层字典的非嵌套部分,如original_dict['a'] = 2,则shallow_copied_dict中的'a'值不会改变。