Chuyển tới nội dung

Tìm Hiểu Deep Copy và Shallow Copy Là Gì?

Tìm Hiểu Deep Copy và Shallow Copy Là Gì?

Trong lập trình, đặc biệt là khi làm việc với các cấu trúc dữ liệu phức tạp như danh sách (list), từ điển (dictionary) hay các đối tượng (objects), bạn thường xuyên phải đối mặt với khái niệm sao chép dữ liệu. Hai thuật ngữ quan trọng liên quan đến việc sao chép dữ liệu là Deep CopyShallow Copy. Bài viết này sẽ giúp bạn hiểu rõ về sự khác biệt giữa chúng và khi nào nên sử dụng từng loại.

1. Khái niệm cơ bản

Shallow Copy (Sao chép nông)

Shallow Copy là quá trình tạo ra một bản sao của đối tượng, nhưng chỉ sao chép các tham chiếu (references) đến các đối tượng con mà không tạo ra các bản sao mới của các đối tượng con đó. Nói cách khác, đối tượng mới và đối tượng gốc sẽ cùng tham chiếu đến cùng một đối tượng con.

Cách hoạt động của Shallow Copy:

Tạo một bản sao của đối tượng gốc.

Các thuộc tính của đối tượng gốc được sao chép, nhưng các tham chiếu đến các đối tượng con (nếu có) chỉ là các tham chiếu, không phải các bản sao mới.

Ví dụ:

import copy

original_list = [[1, 2, 3], [4, 5, 6]]
shallow_copied_list = copy.copy(original_list)

# Thay đổi trong shallow_copied_list ảnh hưởng đến original_list
shallow_copied_list[0][0] = 'X'

print("Original List:", original_list)  # Kết quả: [['X', 2, 3], [4, 5, 6]]
print("Shallow Copied List:", shallow_copied_list)  # Kết quả: [['X', 2, 3], [4, 5, 6]]

Trong ví dụ trên, thay đổi đối tượng con trong shallow_copied_list cũng ảnh hưởng đến original_list vì chúng cùng tham chiếu đến cùng một đối tượng con.

Deep Copy (Sao chép sâu)

Deep Copy là quá trình tạo ra một bản sao của đối tượng gốc cùng với tất cả các đối tượng con của nó. Nói cách khác, đối tượng mới sẽ có các bản sao hoàn toàn độc lập của tất cả các đối tượng con.

Cách hoạt động của Deep Copy:

Tạo một bản sao của đối tượng gốc.

Tạo các bản sao mới cho tất cả các đối tượng con mà đối tượng gốc tham chiếu đến.

Ví dụ:

import copy

original_list = [[1, 2, 3], [4, 5, 6]]
deep_copied_list = copy.deepcopy(original_list)

# Thay đổi trong deep_copied_list không ảnh hưởng đến original_list
deep_copied_list[0][0] = 'X'

print("Original List:", original_list)  # Kết quả: [[1, 2, 3], [4, 5, 6]]
print("Deep Copied List:", deep_copied_list)  # Kết quả: [['X', 2, 3], [4, 5, 6]]

Trong ví dụ trên, thay đổi đối tượng con trong deep_copied_list không ảnh hưởng đến original_listdeep_copied_list có các bản sao độc lập của tất cả các đối tượng con.

2. Sự khác biệt chính

Shallow Copy chỉ sao chép các tham chiếu đến các đối tượng con, trong khi Deep Copy sao chép cả các đối tượng con.

Thay đổi đối tượng con trong Shallow Copy sẽ ảnh hưởng đến đối tượng gốc, trong khi Deep Copy hoàn toàn độc lập.

3. Khi nào nên sử dụng Shallow Copy hoặc Deep Copy

Sử dụng Shallow Copy khi bạn chỉ cần sao chép đối tượng mà không cần tạo ra các bản sao độc lập của các đối tượng con. Điều này giúp tiết kiệm tài nguyên bộ nhớ và thời gian xử lý khi đối tượng con không cần thay đổi độc lập.

Sử dụng Deep Copy khi bạn cần tạo ra một bản sao hoàn toàn độc lập của đối tượng, bao gồm tất cả các đối tượng con. Điều này hữu ích khi bạn cần thao tác với các bản sao mà không làm ảnh hưởng đến đối tượng gốc.

4. Kết luận

Hiểu rõ về Shallow CopyDeep Copy giúp bạn có thể lựa chọn phương pháp sao chép phù hợp trong các tình huống khác nhau. Shallow Copy tiết kiệm tài nguyên nhưng có thể dẫn đến các vấn đề không mong muốn nếu các đối tượng con bị thay đổi, trong khi Deep Copy cung cấp sự độc lập hoàn toàn nhưng yêu cầu nhiều tài nguyên hơn. Tùy thuộc vào yêu cầu của ứng dụng của bạn, bạn sẽ chọn phương pháp sao chép phù hợp để đảm bảo sự chính xác và hiệu suất.

Kết nối với web designer Lê Thành Nam

LinkedIn

LinkedIn (Quốc tế)

Facebook

Twitter

Website

Chia Sẻ Bài Viết
Follow Nam Trên LinkedIn
Follow on LinkedIn

BÀI VIẾT KHÁC

Tham Khảo Các Dịch Vụ Của Web Designer Lê Thành Nam

Thiết Kế WebsiteTrọn Gói
Thiết Kế Website
Trọn Gói
Nâng Tầm Thương Hiệu, Tối Ưu Hiệu Suất
SEO Website Tổng Thể
SEO
Website Tổng Thể
Tăng Thứ Hạng, Thu Hút Khách Hàng
Nâng Cấp Website
Nâng Cấp
Website
Đổi Mới Hiệu Suất, Nâng Cao Trải Nghiệm
Quản Trị Website
Quản Trị
Website
Đảm Bảo Hoạt Động, Tối Ưu Hiệu Suất

Cần Một Website Ấn Tượng?

Bạn muốn một website không chỉ đẹp mà còn thu hút khách hàng và gia tăng doanh số? Mình là Lê Thành Nam, chuyên gia thiết kế web từng hợp tác với nhiều thương hiệu trong và ngoài nước. Nam tin rằng một website không chỉ là nơi trưng bày mà còn là công cụ giúp bạn nổi bật, chuyên nghiệp và chinh phục khách hàng trong từng click chuột! Hãy sở hữu ngay cho mình một website đẹp mắt và hiệu quả với mức giá vô cùng phải chăng cho tất cả mọi người bạn nhé! 

Đừng chần chừ! Nhấn vào nút bên dưới để nhận tư vấn miễn phí ngay hôm nay. 

Bạn cần một website vừa đẹp mắt vừa hiệu quả trong việc thu hút khách hàng và tăng doanh số? Mình là Lê Thành Nam, chuyên gia thiết kế web với kinh nghiệm hợp tác cùng nhiều thương hiệu trong và ngoài nước. Hãy để mình giúp bạn sở hữu một website chuyên nghiệp, ấn tượng, và phù hợp mọi ngân sách!