Python - 複製字典

你好,有抱負的Python程式設計師!今天,我們將深入探討Python中字典複製的迷人世界。作為你友善的鄰居電腦科學老師,我非常高興能引導你走過這段旅程。讓我們將字典想像成我們可以複製的神奇食譜書。听起来很有趣,對吧?讓我們開始吧!

Python - Copy Dictionaries

複製字典

在Python中,字典是極其有用的數據結構,用於存儲鍵值對。但是,如果我們想要創建字典的副本呢?好吧,那裡魔法就開始了!

為什麼要複製字典?

在我們跳進「如何」之前,讓我們先了解「為什麼」。想像一下,如果你有一個最喜歡的餅乾食譜(我們的字典),並且你想與朋友分享。你可以給他們你的原始食譜書,但是他們決定在巧克力豆餅乾中加入辣椒粉怎麼辦?哎呀!這就是為什麼我們要製作副本——在允許修改副本的同時,保持我們的原件安全。

現在,讓我們看看在Python中複製字典的不同方法。

浅拷貝

淺拷貝創建了一個新的字典,但值是對原始字典值的引用。這就像是你食譜書目錄的影印——你有一本新的書,但它仍然指向原始食譜。

讓我們看看這是怎麼工作的:

original_dict = {"apple": 1, "banana": 2, "cherry": [3, 4, 5]}
shallow_copy = original_dict.copy()

print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)

# 修改淺拷貝
shallow_copy["apple"] = 10
shallow_copy["cherry"][0] = 30

print("\nAfter modification:")
print("Original dictionary:", original_dict)
print("Shallow copy:", shallow_copy)

輸出:

Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Shallow copy: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}

After modification:
Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [30, 4, 5]}
Shallow copy: {'apple': 10, 'banana': 2, 'cherry': [30, 4, 5]}

注意,更改「apple」值只影響了淺拷貝,但修改「cherry」列表則改變了兩個字典。這是因為列表是可變的,且兩個字典引用同一個列表物件。

深拷貝

深拷貝創建了一個新的字典,並且有新副本的值。這就像是我們手寫整本食譜書——一切都是全新的和獨立的。

要創建深拷貝,我們需要導入 copy 模塊:

import copy

original_dict = {"apple": 1, "banana": 2, "cherry": [3, 4, 5]}
deep_copy = copy.deepcopy(original_dict)

print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)

# 修改深拷貝
deep_copy["apple"] = 10
deep_copy["cherry"][0] = 30

print("\nAfter modification:")
print("Original dictionary:", original_dict)
print("Deep copy:", deep_copy)

輸出:

Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Deep copy: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}

After modification:
Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Deep copy: {'apple': 10, 'banana': 2, 'cherry': [30, 4, 5]}

看得出差別嗎?使用深拷貝,修改複製中的「cherry」列表不會影響原始字典。

使用 copy() 方法複製字典

copy() 方法是內置的字典方法,用於創建淺拷貝。這就像我們之前提到的影印機——快速簡單,但與淺拷貝有相同的限制。

這是怎麼使用它的:

original_dict = {"apple": 1, "banana": 2, "cherry": [3, 4, 5]}
copy_dict = original_dict.copy()

print("Original dictionary:", original_dict)
print("Copied dictionary:", copy_dict)

# 修改拷貝
copy_dict["apple"] = 10
copy_dict["cherry"][0] = 30

print("\nAfter modification:")
print("Original dictionary:", original_dict)
print("Copied dictionary:", copy_dict)

輸出:

Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}
Copied dictionary: {'apple': 1, 'banana': 2, 'cherry': [3, 4, 5]}

After modification:
Original dictionary: {'apple': 1, 'banana': 2, 'cherry': [30, 4, 5]}
Copied dictionary: {'apple': 10, 'banana': 2, 'cherry': [30, 4, 5]}

正如你所看到的,行為和我們的第一個淺拷貝示例相同。

字典複製方法的比較

讓我們用一個方便的表格來總結不同的方法:

方法 拷貝類型 語法 內嵌物件
賦值 (=) 參考 new_dict = original_dict 共享
copy() 淺拷貝 new_dict = original_dict.copy() 共享
dict() 淺拷貝 new_dict = dict(original_dict) 共享
deepcopy() 深拷貝 new_dict = copy.deepcopy(original_dict) 獨立

記住,選擇正確的拷貝方法取決於你的具體需求。如果你正在處理簡單的字典,淺拷貝可能就足夠了。但是如果你正在處理嵌套結構並需要完全獨立,那就選擇深拷貝。

總結來說,Python中的字典複製就像複製你最喜歡的食譜一樣。有時你只需要一個快速的參考(淺拷貝),有時你想要創建一個全新的食譜書(深拷貝)。選擇權在你,年輕的Pythonista!

現在,為什麼不你自己試試這些方法呢?創建你自己的字典「食譜書」並嘗試不同的複製技術。編程愉快,願你的字典永遠完美複製!

Credits: Image by storyset