Python - 复制字典
复制字典
在 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)
这将产生以下输出 -- MOHTASHIM −
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() 方法来创建一个字典的浅副本。
语法
以下是 Python 中 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}