Deep Copy và Shallow Copy là gì ?

  • Friday 09/08/2024

Hiểu Rõ về Deep Copy và Shallow Copy trong Python

Trong lập trình Python, thao tác với các đối tượng có thể bao gồm việc sao chép các đối tượng, đặc biệt khi làm việc với các cấu trúc dữ liệu phức tạp như danh sách lồng nhau, từ điển lồng nhau, hoặc các đối tượng tùy chỉnh. Hai phương pháp chính để sao chép đối tượng trong Python là shallow copy (sao chép nông) và deep copy (sao chép sâu). Hiểu rõ sự khác biệt giữa chúng là rất quan trọng để tránh lỗi và tối ưu hóa hiệu suất.

Deep Copy và Shallow Copy

 

1. Shallow Copy là gì ?

Shallow copy là một phương pháp sao chép đối tượng mà chỉ sao chép đối tượng chính, còn các đối tượng con mà nó tham chiếu sẽ được chia sẻ giữa bản sao và bản gốc. Nói cách khác, shallow copy tạo ra một bản sao của đối tượng gốc và sao chép các tham chiếu đến các đối tượng con, nhưng không sao chép chính các đối tượng con đó.

Deep Copy và Shallow Copy

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

Khi thực hiện shallow copy, bản sao sẽ có cùng các thuộc tính như đối tượng gốc, nhưng các đối tượng con được tham chiếu bởi đối tượng gốc sẽ không được sao chép mà chỉ có các tham chiếu của chúng được sao chép. Do đó, nếu bạn thay đổi một đối tượng con trong bản sao, thay đổi đó sẽ được phản ánh trong đối tượng con tương ứng của đối tượng gốc, và ngược lại. Điều này là do cả bản sao và bản gốc đều trỏ đến cùng một đối tượng con trong bộ nhớ.

1.2. Các phương pháp để thực hiện Shallow Copy

  • Sử dụng phương thức copy(): Nhiều loại đối tượng trong Python như danh sách (list), từ điển (dictionary), và tập hợp (set) cung cấp phương thức copy() để thực hiện shallow copy. Phương thức này thường là cách đơn giản và hiệu quả để sao chép các đối tượng mà không cần phải sử dụng các công cụ bên ngoài.
  • Sử dụng hàm copy.copy() từ module copy: Hàm này là một cách linh hoạt hơn để thực hiện shallow copy, vì nó có thể được sử dụng với bất kỳ đối tượng nào, không chỉ các loại đối tượng hỗ trợ phương thức copy().

2. Deep Copy là gì ?

Deep copy là phương pháp sao chép đối tượng mà không chỉ sao chép đối tượng chính mà còn sao chép toàn bộ các đối tượng con mà đối tượng chính tham chiếu đến. Điều này đảm bảo rằng bản sao là hoàn toàn độc lập với đối tượng gốc. Deep copy tạo ra các bản sao của tất cả các đối tượng con, do đó thay đổi trong bản sao không ảnh hưởng đến đối tượng gốc và ngược lại.

Deep Copy và Shallow Copy

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

Deep copy thực hiện sao chép không chỉ đối tượng chính mà còn tất cả các đối tượng con của nó, cho đến khi không còn đối tượng con nào nữa. Do đó, bản sao được tạo ra là hoàn toàn tách biệt với đối tượng gốc, và mọi thay đổi đối với bản sao đều không ảnh hưởng đến đối tượng gốc. Deep copy cung cấp sự tách biệt hoàn toàn giữa đối tượng gốc và bản sao, điều này rất quan trọng khi làm việc với các cấu trúc dữ liệu phức tạp có nhiều cấp độ lồng nhau.

2.2. Phương pháp để thực hiện Deep Copy

  • Sử dụng hàm copy.deepcopy() từ module copy: Đây là cách chính thức và phổ biến để thực hiện deep copy trong Python. Hàm này đảm bảo rằng tất cả các đối tượng con đều được sao chép và không còn liên kết với đối tượng gốc. Deep copy là sự lựa chọn tối ưu khi bạn cần sao chép các đối tượng phức tạp với cấu trúc lồng nhau.

3. Khi nào nên sử dụng Deep Copy và Shallow Copy ?

  • Shallow Copy: Được sử dụng khi bạn chỉ cần sao chép đối tượng chính và không quan tâm đến việc sao chép các đối tượng con hoặc khi các đối tượng con không cần được sao chép độc lập. Shallow copy là lựa chọn tốt khi bạn làm việc với các đối tượng đơn giản hoặc khi bạn biết rằng các đối tượng con không cần được sao chép. Nó thường nhanh hơn và ít tiêu tốn tài nguyên hơn so với deep copy vì nó chỉ sao chép các tham chiếu.
  • Deep Copy: Được sử dụng khi bạn cần sao chép toàn bộ đối tượng và tất cả các đối tượng con của nó, đảm bảo rằng bản sao hoàn toàn độc lập với đối tượng gốc. Deep copy là lựa chọn phù hợp khi bạn làm việc với các cấu trúc dữ liệu phức tạp và cần đảm bảo rằng không có liên kết nào giữa bản sao và đối tượng gốc. Mặc dù deep copy có thể tốn thời gian và tài nguyên hơn vì phải sao chép tất cả các đối tượng con, nó đảm bảo tính toàn vẹn và sự độc lập của dữ liệu.

Deep Copy và Shallow Copy

4. Tổng Kết:

Shallow copydeep copy là hai phương pháp chính để sao chép đối tượng trong Python, mỗi phương pháp có ưu và nhược điểm riêng. Shallow copy chỉ sao chép đối tượng chính và các tham chiếu đến các đối tượng con, trong khi deep copy sao chép toàn bộ đối tượng và các đối tượng con của nó, tạo ra sự tách biệt hoàn toàn giữa bản sao và đối tượng gốc. Việc chọn phương pháp sao chép phù hợp phụ thuộc vào yêu cầu của ứng dụng và cấu trúc của dữ liệu mà bạn đang làm việc. Hiểu rõ sự khác biệt và ứng dụng của từng phương pháp sẽ giúp bạn quản lý dữ liệu và tránh các lỗi không mong muốn trong mã nguồn của mình.

==========

Xem thêm nhiều kiến thức hữu ích tại đây:

P.A Việt Nam cung cấp đa dạng các dịch vụ Máy Chủ Ảo và Máy Chủ Riêng chạy trên môi trường Windows, Linux tương thích với ứng dụng Python:

Cloud Server
Cloud Server Pro
Máy Chủ Riêng

Hosting Nodejs
Hosting Python

Tham khảo các ưu đãi: https://www.pavietnam.vn/vn/tin-khuyen-mai/

5/5 - (1 bình chọn)