Python – 字典複製



複製字典

在 Python 中複製字典是指建立一個新的字典,其中包含與原始字典相同的鍵值對。

我們可以使用多種方法複製字典,具體取決於需求和字典值的性質(它們是可變的還是不可變的,是巢狀的還是非巢狀的)。

淺複製

執行淺複製時,會建立一個新的字典物件,但它包含對原始字典引用的相同物件的引用。

當您想要複製字典的結構而不復制其包含的巢狀物件時,這很有用。

這可以使用 copy() 方法或 dict() 函式完成,如下所示:

示例:使用 copy() 方法

在下面的示例中,我們可以看到更改淺複製中的“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']}

示例:使用 dict() 方法

與 copy() 方法類似,dict() 方法 建立一個淺複製,如下例所示:

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#']}

深複製

深複製建立一個新的字典,並遞迴地複製原始字典中找到的所有物件。這意味著不僅字典本身,而且它包含的所有物件(包括巢狀字典、列表等)都會被複制。結果,對深複製所做的更改不會影響原始字典,反之亦然。

我們可以使用 copy 模組中的 deepcopy() 函式實現這一點。

示例

在下面的示例中,我們可以看到深複製中的“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() 方法複製字典

不能直接使用賦值運算子 (=) 複製字典,可以使用copy() 方法建立字典的淺複製

語法

以下是 Python 中 copy() 方法的基本語法:

new_dict = original_dict.copy()

其中,original_dict 是您要複製的字典。

示例

以下示例演示了使用 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)

輸出

我們將得到如下所示的輸出:

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