在Python中复制字典指的是创建一个新的字典,其中包含与原始字典相同的键值对。
我们可以根据需求和字典值的性质(它们是否可变或不可变,嵌套与否)采用不同的方式来复制字典。
浅复制
当你执行浅复制时,会创建一个新的字典对象,但它包含指向原始字典引用的相同对象的引用。
当你希望复制字典结构而不复制其所包含的嵌套对象时,这种方法是有用的。
这可以通过使用 copy()
方法或 dict()
函数来实现,如下面的例子所示:
示例:使用 copy()
方法
在下面的例子中,可以看到在浅复制中修改 "age" 不会影响原始字典。
然而,修改浅复制中的列表也会影响到原始字典,因为列表是一个可变对象,只有引用被复制了。
original_dict = {"name": "Alice", "age": 25, "skills": ["Python", "Data Science"]}
shallow_copy = original_dict.copy()
shallow_copy["age"] = 26
shallow_copy["skills"].append("Machine Learning")
print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)
上述代码的输出如下:
Original dictionary: {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Data Science', 'Machine Learning']}
Shallow copy: {'name': 'Alice', 'age': 26, 'skills': ['Python', 'Data Science', 'Machine Learning']}
示例:使用 dict()
方法
与 copy()
方法类似,dict()
方法也会创建一个浅复制,如下面的例子所示:
original_dict = {"name": "Bob", "age": 30, "skills": ["Java", "C++"]}
shallow_copy = dict(original_dict)
shallow_copy["age"] = 31
shallow_copy["skills"].append("C#")
print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)
上述代码的输出如下:
Original dictionary: {'name': 'Bob', 'age': 30, 'skills': ['Java', 'C++', 'C#']}
Shallow copy: {'name': 'Bob', 'age': 31, 'skills': ['Java', 'C++', 'C#']}
深复制
深复制会创建一个新的字典,并递归地复制原始字典中发现的所有对象。这意味着不仅字典本身被复制了,而且它所包含的所有对象(包括嵌套字典、列表等)也被复制了。结果是,对深复制所做的更改不会影响原始字典,反之亦然。
我们可以通过导入 copy
模块中的 deepcopy()
函数来实现这一点。
示例
在下面的例子中,可以看到深复制中的 "age" 值被更改了,深复制中的 "skills" 列表被修改了(添加了一项),并且深复制中的 "education" 字典也被修改了,所有这些都没有影响到原始字典。
import copy
original_dict = {
"name": "Alice",
"age": 25,
"skills": ["Python", "Data Science"],
"education": {
"degree": "Bachelor's",
"field": "Computer Science"
}
}
deep_copy = copy.deepcopy(original_dict)
deep_copy["age"] = 26
deep_copy["skills"].append("Machine Learning")
deep_copy["education"]["degree"] = "Master's"
print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)
上述代码的输出如下:
Original dictionary: {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Data Science'], 'education': {'degree': 'Bachelor\'s', 'field': 'Computer Science'}}
Deep copy: {'name': 'Alice', 'age': 26, 'skills': ['Python', 'Data Science', 'Machine Learning'], 'education': {'degree': 'Master\'s', 'field': 'Computer Science'}}
使用 copy()
方法复制字典
字典不能直接通过赋值运算符 (=) 来复制,你可以使用 copy()
方法来创建一个字典的浅复制。
语法
copy()
方法的基本语法如下:
new_dict = original_dict.copy()
其中 original_dict
是你要复制的字典。
示例
下面的例子演示了使用 copy()
方法创建字典的浅复制:
dict1 = {"name": "Krishna", "age": "27", "doy": 1992}
dict2 = dict1.copy()
print("dict1 :", dict1)
print("dict2 :", dict2)
输出如下:
dict1 : {'name': 'Krishna', 'age': '27', 'doy': 1992}
dict2 : {'name': 'Krishna', 'age': '27', 'doy': 1992}