Lỗi sao chép Python: Nguyên nhân và cách tránh
tsudev· 18/10/2026
Giới thiệu
Khi làm việc với mã Python, việc sao chép đối tượng là một hành động phổ biến. Tuy nhiên, nếu không được thực hiện đúng cách, nó có thể dẫn đến lỗi khó tìm và sửa. Một trong những lỗi như vậy là lỗi sao chép, nơi thay đổi đối tượng sao chép ảnh hưởng đến đối tượng gốc.Nguyên nhân của lỗi sao chép
Lỗi sao chép xảy ra khi sử dụng toán tử= để gán giá trị của một đối tượng cho một biến khác. Điều này không tạo ra một bản sao của đối tượng, mà chỉ tạo ra một tham chiếu mới đến đối tượng gốc. Vì vậy, khi thay đổi đối tượng thông qua biến mới, nó cũng sẽ thay đổi đối tượng gốc.
Ví dụ, nếu chúng ta có một danh sách my_list và muốn tạo một bản sao của nó bằng cách sử dụng new_list = my_list, thì new_list chỉ là một tham chiếu đến my_list. Khi chúng ta thay đổi new_list, nó cũng sẽ thay đổi my_list.
python
my_list = [1, 2, 3]
new_list = my_list
new_list.append(4)
print(my_list) # Kết quả: [1, 2, 3, 4]
Cách tránh lỗi sao chép
Để tránh lỗi sao chép, chúng ta cần tạo ra một bản sao thực sự của đối tượng. Đối với danh sách, chúng ta có thể sử dụng phương thứccopy() hoặc toán tử + để tạo bản sao.
python
my_list = [1, 2, 3]
new_list = my_list.copy()
new_list.append(4)
print(my_list) # Kết quả: [1, 2, 3]
print(new_list) # Kết quả: [1, 2, 3, 4]
Đối với các đối tượng phức tạp hơn như từ điển hoặc đối tượng tùy chỉnh, chúng ta có thể sử dụng mô-đun copy để tạo bản sao sâu.
python
import copy
my_dict = {'a': 1, 'b': 2}
new_dict = copy.deepcopy(my_dict)
new_dict['c'] = 3
print(my_dict) # Kết quả: {'a': 1, 'b': 2}
print(new_dict) # Kết quả: {'a': 1, 'b': 2, 'c': 3}
Kết luận
Lỗi sao chép trong Python có thể lọt qua kiểm tra mã nếu không được chú ý đúng mức. Tuy nhiên, bằng cách hiểu rõ nguyên nhân và cách tránh lỗi này, lập trình viên có thể viết mã an toàn và hiệu quả hơn. Để tránh lỗi sao chép, hãy luôn tạo bản sao của đối tượng bằng cách sử dụng phương thứccopy() hoặc mô-đun copy thay vì sử dụng toán tử =.
Nguồn: https://dev.to/realdev9868/the-python-copy-bug-that-looks-fine-in-code-review-9k