Python 简明教程

Python - Copy Dictionaries

Copy Dictionaries

在 Python 中复制字典是指创建包含与原始字典相同键值对的新字典。

我们可以使用多种方法复制字典,这取决于要求和字典的值的性质(它们是否可变或不可变、是否嵌套)。

Shallow Copy

当你执行浅拷贝时,将创建一个新的字典对象,但它包含对原始字典引用的相同对象的引用。

当你希望复制字典的结构而不复制其包含的嵌套对象时,这非常有用。

这可以使用 copy() 方法或 dict() 函数完成,如下所示−

Example: Using the copy() Method

在下面的示例中,我们可以看到更改浅拷贝中的“age”不会影响原始“age”。

但是,修改浅拷贝中的列表也会影响原始列表,因为列表是可变对象,只复制了一个引用。

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)

以下是上面代码的输出: -

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 创建一个浅拷贝,如下例所示−

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)

上述代码的输出如下:

Original dictionary: {'name': 'Bob', 'age': 30, 'skills': ['Java', 'C++', 'C#']}
Shallow copy: {'name': 'Bob', 'age': 31, 'skills': ['Java', 'C++', 'C#']}

Deep Copy

深拷贝创建一个新的字典,并递归复制原始字典中找到的所有对象。这意味着不仅字典本身,还包括其包含的所有对象(包括嵌套字典、列表等)都被复制了。因此,对深拷贝进行的更改不会影响原始字典,反之亦然。

我们可以使用 copy 模块中的 deepcopy() 函数实现此目的。

Example

我们在下面的示例中可以看到深拷贝中的“age”值已更改,深拷贝中的“skills”列表已修改(添加了一个项目),并且深拷贝中的“education”字典已修改,所有这些都不会影响原始字典−

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)

这将产生以下输出 −

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 浅拷贝。

Syntax

以下是在 Python 中 copy() 方法的基本语法−

new_dict = original_dict.copy()

其中, original_dict 是你要复制的字典。

Example

以下示例演示如何使用 copy() 方法创建字典的浅表副本 -

# 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

我们将获得如下所示的输出 -

dict1 : {'name': 'Krishna', 'age': '27', 'doy': 1992}
dict2 : {'name': 'Krishna', 'age': '27', 'doy': 1992}