Deepcopy Python

deepcopy là một kỹ thuật tạo bản sao của đối tượng python nơi người dùng có thể làm việc trên các đối tượng có thể thay đổi mà không thay đổi hoặc sửa đổi đối tượng ban đầu bằng cách tạo các bản sao hoặc bản sao của đối tượng thực. Hay nói cách khác, khi người dùng quyết định sửa đổi một đối tượng bằng cách thực hiện các thao tác khác nhau cho phép người dùng làm việc trên đó mà không cần chỉnh sửa hoặc thay đổi đối tượng thực tế, thì có thể thực hiện bằng cách triển khai cú pháp deepcopy để tạo một bản sao từ đối tượng ban đầu

Cú pháp của bản sao sâu Python

Có hai loại bản sao Shallow Copy và deepcopy mà người dùng có thể thực hiện trong Python tùy theo nhu cầu hay mục đích sử dụng bản sao đó

Cú pháp cơ bản của bản sao Python

cú pháp

Bắt đầu khóa học phát triển phần mềm miễn phí của bạn

Phát triển web, ngôn ngữ lập trình, kiểm thử phần mềm và những thứ khác

import copy
l1 = [120, 210, [11,33], 240]
# for shallow copy
l2 = copy.copy(l1)
# for deepcopy
l3 = copy.deepcopy(l1)

đầu ra

Bản sao nông

Deepcopy Python

DeepCopy

Deepcopy Python

Đoạn mã trên hiển thị đầu ra của Shallowcopy và deepcopy của danh sách l1 mà chúng ta đã khai báo. Bản sao sâu sẽ tạo một bản sao của đối tượng gốc theo cách đệ quy trong đó tài liệu ban đầu diễn ra bằng cách sao chép đối tượng gốc. Sau đó, các bản sao kế tiếp của đối tượng con sẽ được sao chép đệ quy để đối tượng ban đầu không thay đổi. Hàm deepcopy() được sử dụng trong mã để thực hiện thao tác sao chép sâu trong đó các thay đổi hoặc thay đổi được thực hiện trong bản sao chép sâu của đối tượng không phản ánh trong đối tượng ban đầu

Gói phát triển phần mềm tất cả trong một(hơn 600 khóa học, hơn 50 dự án)

Deepcopy Python
Deepcopy Python
Deepcopy Python
Deepcopy Python

Deepcopy Python
Deepcopy Python
Deepcopy Python
Deepcopy Python

Giá bán
Xem các khóa học

Hơn 600 khóa học trực tuyến. hơn 50 dự án. Hơn 3000 giờ. Giấy chứng nhận có thể kiểm chứng. Truy cập trọn đời
4. 6 (86.328 xếp hạng)

Bản sao sâu hoạt động như thế nào?

Một cách đơn giản được trình bày trong đó chúng tôi đã thực hiện thao tác sao chép sâu trên một danh sách, sau đó thay đổi danh sách đã sao chép và in các giá trị thực cũng như các giá trị được sao chép trong danh sách để hiển thị một bức tranh rõ ràng về chức năng của đối tượng sao chép sâu

cú pháp

import copy
l1 = [120, 210, [11,33], 240] 
    
# using deepcopy for copying l1   
l3 = copy.deepcopy(l1)

print ("The original elements in the list l1") 
for i in range(0,len(l1)): 
    print (l1[i],end=" ") 
  
print("\r") 
  
# Altering the Deepcopy list l3
l3[1] = 70
  
# Change made at 2nd position is seen in list l2  
print ("The new list of elements after deep copying ") 
for i in range(0,len( l1)): 
    print (l3[i],end=" ") 
  
print("\r") 
### The Actual List l1 remains unchanged  
print ("The original elements after deep copying") 
for i in range(0,len( l1)): 
    print (l1[i],end=" ")

đầu ra

Danh sách thực tế l1

Deepcopy Python

Danh sách thay đổi l3

Deepcopy Python

Danh sách thực tế không thay đổi l1

Deepcopy Python

Sự liên quan của các đối tượng phức hợp như danh sách, lớp hoặc những thứ khác tạo ra sự khác biệt trong bản sao nông và bản sao sâu. Bản sao sâu mới tạo một đối tượng phức hợp như danh sách hoặc lớp và theo cách đệ quy, các đối tượng được sao chép từ đối tượng thực để mọi thay đổi trong bản sao sâu sẽ không được phản ánh trong đối tượng ban đầu

Khi người dùng tạo một đối tượng trùng lặp bằng cách sử dụng toán tử = và gán nó cho một biến khác, đối tượng đó có xu hướng trông giống như một đối tượng độc lập. Tuy nhiên, nó đại diện cho đối tượng ban đầu, vì vậy bất kỳ thay đổi nào đối với cùng một thứ sẽ dẫn đến những thay đổi trong đối tượng ban đầu

Thí dụ

Với ví dụ dưới đây, chúng ta thấy chức năng của toán tử =

cú pháp

l1 = [120, 210, [11,33], 240]
l2=l1
l2[2][0]=400
print(l1)

đầu ra

Deepcopy Python

Ở đầu ra, chúng ta có thể thấy rằng danh sách ban đầu l1 đã bị thay đổi ngay khi danh sách trùng lặp được tạo bằng toán tử = bị thay đổi. Vì vậy, để tránh điều này và không thay đổi danh sách ban đầu, chúng tôi sử dụng bản sao sâu Python, bảo tồn danh sách ban đầu và cho phép chúng tôi thay đổi và thực hiện các thao tác khác nhau trong bản sao

Thí dụ

Ở đây chúng tôi có một ví dụ cho thấy rằng trong khi thực hiện deepcopy, các đối tượng gốc và sao chép hoạt động độc lập như các đối tượng duy nhất

cú pháp

original_list= [120, 210, [11,33], 240]
copy_list=copy.deepcopy(original_list)
copy_list[2][1]=300
print(original_list)
print(copy_list)
original_list[2][1]='BBB'
print(original_list)
print(copy_list)

đầu ra

Deepcopy Python

Trong ví dụ trên, chúng tôi đã tạo hai danh sách, sửa đổi cả hai danh sách và in các giá trị, vì vậy đầu ra cho chúng tôi thấy rằng cả hai đều độc lập và một danh sách không ảnh hưởng đến đối tượng kia. Đây là mục tiêu chính của deepcopy trong Python

Thí dụ

Thêm ví dụ về deepcopy để hiểu rõ hơn về chức năng của deepcopy

cú pháp

from copy import deepcopy
l1 = ['ab','bc',['aab','bba']]
l2 = deepcopy(l1)
l2[2][1] = "ddd"
l2[0] = "abc"
print(l1)
print(l2)

đầu ra

Deepcopy Python

cú pháp

import copy
# implementing Equals operator '=' operator
x = [2, 4, 10]
y = x
x[0] = 11
print("Shallow copy: ", y)
# The values inside the list 'y' also changes as it is the SAME object
x[2] = 15
# Using deepcopy function
a = [101, 120, 330]
b = copy.deepcopy(a)
a[1] = 70
print("Deep copy: ", b)

đầu ra

Deepcopy Python

Trong ví dụ trên, chúng tôi có hai danh sách, a & b và x & y, với các số và đã thay đổi cả hai danh sách và thay thế các giá trị khác nhau ở các vị trí khác nhau của danh sách, và kết quả tương ứng được in ra. Khi chúng tôi sử dụng chức năng Shallowcopy, chúng tôi nhận thấy rằng ngay khi giá trị của x bị thay đổi, đối tượng y cũng thay đổi theo, hạn chế chúng tôi giữ lại đối tượng cũ và thực tế. Vì vậy, để khắc phục hạn chế này, chúng tôi đã sử dụng chức năng deepcopy và tạo danh sách b, là bản sao của danh sách a và các thay đổi được thực hiện trong danh sách a;

chức năng deepcopy có thể được gọi sau khi nhập bản sao gói, cả bản sao sâu và bản sao nông đều có thể đạt được từ bản sao gói. Chúng ta có thể sử dụng import copy hoặc from copy import deepcopy

Phần kết luận

Chúng tôi đã xem chi tiết bản sao sâu Python phổ biến nhất trong nền tảng lập trình python vì tầm quan trọng của nó khi làm việc với các bản sao hoặc bản sao của các đối tượng gốc nơi người dùng có thể tạo một bản sao trùng lặp của một thứ thực tế và làm cho nó độc lập với đối tượng gốc . Hiểu sâu về Python rất hữu ích khi triển khai các dự án phát triển python khác nhau

Bài viết được đề xuất

Đây là hướng dẫn về Python deepcopy. Ở đây chúng tôi thảo luận về phần giới thiệu về Python deepcopy và cách nó hoạt động với các ví dụ tương ứng. Bạn cũng có thể xem các bài viết sau để tìm hiểu thêm –

Deepcopy() trong Python là gì?

Bản sao sâu xây dựng một đối tượng phức hợp mới và sau đó, theo cách đệ quy, chèn các bản sao của các đối tượng được tìm thấy trong bản gốc vào đó.

Khi nào nên sử dụng Deepcopy Python?

Trong trường hợp sao chép sâu, một bản sao của đối tượng được sao chép sang đối tượng khác. Điều đó có nghĩa là bất kỳ thay đổi nào được thực hiện đối với bản sao của đối tượng không phản ánh trong đối tượng ban đầu . Trong python, điều này được thực hiện bằng hàm “deepcopy()”.

Sự khác biệt giữa Deepcopy và sao chép trong Python là gì?

deepcopy() sao chép đối tượng ban đầu theo cách đệ quy, trong khi. copy() tạo một đối tượng tham chiếu đến dữ liệu cấp một của đối tượng ban đầu .

Bản sao () có phải là bản sao sâu không?

bản sao() trả về một bản sao nông của danh sách và deepcopy() trả về một bản sao sâu của danh sách .