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