Python - Sao chép từ điển

Xin chào các bạn lập trình viên Python đang học hỏi! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của việc sao chép từ điển trong Python. Như một người giáo viên khoa học máy tính gần gũi, tôi rất vui mừng được hướng dẫn các bạn trong hành trình này. Hãy tưởng tượng từ điển như những cuốn sách công thức ma thuật mà chúng ta có thể nhân bản. Đ听起来 vui vẻ phải không? Hãy bắt đầu nhé!

Python - Copy Dictionaries

Sao chép từ điển

Trong Python, từ điển là cấu trúc dữ liệu vô cùng hữu ích để lưu trữ các cặp khóa-giá trị. Nhưng nếu chúng ta muốn tạo một bản sao của từ điển thì sao? Đó chính là nơi phép thuật bắt đầu!

Tại sao sao chép từ điển?

Trước khi chúng ta vào phần "làm thế nào", hãy hiểu phần "tại sao". Hãy tưởng tượng bạn có một công thức bánh quy yêu thích (từ điển của chúng ta), và bạn muốn chia sẻ nó với một người bạn. Bạn có thể cho họ cuốn sách công thức gốc của bạn, nhưng nếu họ quyết định thêm bột ớt vào bánh quy sô-cô-la thì sao? Ồ không! Đó là lý do chúng ta tạo bản sao - để giữ nguyên bản gốc an toàn trong khi cho phép các chỉnh sửa trên bản sao.

Bây giờ, hãy cùng nhìn vào các cách khác nhau để sao chép từ điển trong Python.

Sao chép nông (Shallow Copy)

Sao chép nông tạo ra một từ điển mới, nhưng các giá trị là tham chiếu đến các giá trị của từ điển gốc. Nó giống như tạo một bản sao chép của mục lục cuốn sách công thức của bạn - bạn có một cuốn sách mới, nhưng nó vẫn chỉ đến các công thức gốc.

Hãy cùng xem điều này trong thực tế:

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)

# Chỉnh sửa bản sao nông
shallow_copy["apple"] = 10
shallow_copy["cherry"][0] = 30

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

Kết quả:

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

Chú ý rằng việc thay đổi giá trị 'apple' chỉ ảnh hưởng đến bản sao nông, nhưng việc chỉnh sửa danh sách 'cherry' thay đổi cả hai từ điển. Điều này là vì danh sách là có thể thay đổi, và cả hai từ điển tham chiếu đến cùng một đối tượng danh sách.

Sao chép sâu (Deep Copy)

Sao chép sâu tạo ra một từ điển mới với các bản sao mới của các giá trị. Nó giống như viết lại toàn bộ cuốn sách công thức bằng tay - mọi thứ đều mới và độc lập.

Để tạo một bản sao sâu, chúng ta cần nhập module 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)

# Chỉnh sửa bản sao sâu
deep_copy["apple"] = 10
deep_copy["cherry"][0] = 30

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

Kết quả:

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

Như bạn thấy, việc thay đổi danh sách 'cherry' trong bản sao sâu không ảnh hưởng đến từ điển gốc.

Sao chép từ điển bằng phương thức copy()

Phương thức copy() là một phương thức内置 của từ điển tạo ra một bản sao nông. Nó giống như máy photocopy chúng ta đã đề cập trước đó - nhanh và dễ dàng, nhưng có cùng các hạn chế như bản sao nông.

Dưới đây là cách sử dụng nó:

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)

# Chỉnh sửa bản sao
copy_dict["apple"] = 10
copy_dict["cherry"][0] = 30

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

Kết quả:

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

Như bạn có thể thấy, hành vi là giống hệt như ví dụ sao chép nông đầu tiên.

So sánh các phương thức sao chép từ điển

Hãy tóm tắt các phương thức khác nhau trong bảng sau:

Phương thức Loại sao chép Cú pháp Đối tượng嵌套
Gán (=) Tham chiếu new_dict = original_dict Chia sẻ
copy() Nông new_dict = original_dict.copy() Chia sẻ
dict() Nông new_dict = dict(original_dict) Chia sẻ
deepcopy() Sâu new_dict = copy.deepcopy(original_dict) Độc lập

Nhớ rằng, việc chọn phương thức sao chép phù hợp phụ thuộc vào nhu cầu cụ thể của bạn. Nếu bạn làm việc với các từ điển đơn giản, bản sao nông có thể đủ. Nhưng nếu bạn xử lý các cấu trúc嵌套 và cần sự độc lập hoàn toàn, hãy chọn bản sao sâu.

Cuối cùng, sao chép từ điển trong Python giống như tạo bản sao của cuốn sách công thức yêu thích của bạn. Đôi khi bạn chỉ cần một bản sao tham khảo (bản sao nông), và những lúc khác bạn muốn tạo một cuốn sách công thức hoàn toàn mới (bản sao sâu). Lựa chọn của bạn, bạn trẻ Pythonista!

Bây giờ, tại sao không thử các phương thức này chính bạn? Tạo cuốn "sách công thức" từ điển riêng của bạn và thử nghiệm với các kỹ thuật sao chép khác nhau. Chúc các bạn lập trình vui vẻ, và may mắn với các từ điển của bạn luôn được sao chép hoàn hảo!

Credits: Image by storyset