Python 简明教程
Python - Copy Dictionaries
Copy Dictionaries
在 Python 中复制字典是指创建包含与原始字典相同键值对的新字典。
Copying dictionaries in Python refers to creating a new dictionary that contains the same key-value pairs as the original dictionary.
我们可以使用多种方法复制字典,这取决于要求和字典的值的性质(它们是否可变或不可变、是否嵌套)。
We can copy dictionaries using various ways, depending on the requirements and the nature of the dictionary’s values (whether they are mutable or immutable, nested or not).
Shallow Copy
当你执行浅拷贝时,将创建一个新的字典对象,但它包含对原始字典引用的相同对象的引用。
When you perform a shallow copy, a new dictionary object is created, but it contains references to the same objects that the original dictionary references.
当你希望复制字典的结构而不复制其包含的嵌套对象时,这非常有用。
This is useful when you want to duplicate the structure of a dictionary without duplicating the nested objects it contains.
这可以使用 copy() 方法或 dict() 函数完成,如下所示−
This can be done using the copy() method or the dict() function as shown below −
Example: Using the copy() Method
在下面的示例中,我们可以看到更改浅拷贝中的“age”不会影响原始“age”。
In the following example, we can see that changing the "age" in the shallow copy does not affect the original.
但是,修改浅拷贝中的列表也会影响原始列表,因为列表是可变对象,只复制了一个引用。
However, modifying the list in the shallow copy also affects the original because the list is a mutable object and only a reference is copied.
original_dict = {"name": "Alice", "age": 25, "skills": ["Python", "Data Science"]}
shallow_copy = original_dict.copy()
# Modifying the shallow copy
shallow_copy["age"] = 26
shallow_copy["skills"].append("Machine Learning")
print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)
以下是上面代码的输出: -
Following is the output of the above code −
Original dictionary: {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Data Science', 'Machine Learning']}
Shallow copy: {'name': 'Alice', 'age': 26, 'skills': ['Python', 'Data Science', 'Machine Learning']}
Example: Using the dict() Method
类似于 copy() 方法, dict() method 创建一个浅拷贝,如下例所示−
Similar to the copy() method, the dict() method creates a shallow copy as shown in the example below −
original_dict = {"name": "Bob", "age": 30, "skills": ["Java", "C++"]}
shallow_copy = dict(original_dict)
# Modifying the shallow copy
shallow_copy["age"] = 31
shallow_copy["skills"].append("C#")
print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)
上述代码的输出如下:
Output of the above code is as follows −
Original dictionary: {'name': 'Bob', 'age': 30, 'skills': ['Java', 'C++', 'C#']}
Shallow copy: {'name': 'Bob', 'age': 31, 'skills': ['Java', 'C++', 'C#']}
Deep Copy
深拷贝创建一个新的字典,并递归复制原始字典中找到的所有对象。这意味着不仅字典本身,还包括其包含的所有对象(包括嵌套字典、列表等)都被复制了。因此,对深拷贝进行的更改不会影响原始字典,反之亦然。
A deep copy creates a new dictionary and recursively copies all objects found in the original dictionary. This means that not only the dictionary itself but also all objects it contains (including nested dictionaries, lists, etc.) are copied. As a result, changes made to the deep copy do not affect the original dictionary and vice versa.
我们可以使用 copy 模块中的 deepcopy() 函数实现此目的。
We can achieve this using the deepcopy() function in the copy module.
Example
我们在下面的示例中可以看到深拷贝中的“age”值已更改,深拷贝中的“skills”列表已修改(添加了一个项目),并且深拷贝中的“education”字典已修改,所有这些都不会影响原始字典−
We can see in the example below that the "age" value in the deep copy is changed, the "skills" list in the deep copy is modified (an item is appended) and the "education" dictionary in the deep copy is modified, all without affecting the original −
import copy
original_dict = {
"name": "Alice",
"age": 25,
"skills": ["Python", "Data Science"],
"education": {
"degree": "Bachelor's",
"field": "Computer Science"
}
}
# Creating a deep copy
deep_copy = copy.deepcopy(original_dict)
# Modifying the deep copy
deep_copy["age"] = 26
deep_copy["skills"].append("Machine Learning")
deep_copy["education"]["degree"] = "Master's"
# Retrieving both dictionaries
print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)
这将产生以下输出 −
This will produce the following output −
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 Dictionaries Using copy() Method
无法通过使用赋值运算符(=)直接复制 Dictionaries ,可以使用 copy() method 创建 copy of a dictionary 浅拷贝。
Dictionaries cannot be copied directly by using the assignment operator (=), you can use the copy() method to create a shallow copy of a dictionary.
Syntax
以下是在 Python 中 copy() 方法的基本语法−
Following is the basic syntax of the copy() method in Python −
new_dict = original_dict.copy()
其中, original_dict 是你要复制的字典。
Where, original_dict is the dictionary you want to copy.
Example
以下示例演示如何使用 copy() 方法创建字典的浅表副本 -
The following example demonstrates the creation of a shallow copy of a dictionary using the copy() method −
# Creating a dictionary
dict1 = {"name": "Krishna", "age": "27", "doy": 1992}
# Copying the dictionary
dict2 = dict1.copy()
# Printing both of the dictionaries
print("dict1 :", dict1)
print("dict2 :", dict2)
Output
我们将获得如下所示的输出 -
We will get the output as shown below −
dict1 : {'name': 'Krishna', 'age': '27', 'doy': 1992}
dict2 : {'name': 'Krishna', 'age': '27', 'doy': 1992}