Hướng dẫn example of shallow copy in python - ví dụ về bản sao nông trong python

Sao chép một đối tượng trong Python

Trong Python, chúng tôi sử dụng toán tử

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
3 để tạo một bản sao của một đối tượng. Bạn có thể nghĩ rằng điều này tạo ra một đối tượng mới; nó không. Nó chỉ tạo ra một biến mới chia sẻ tham chiếu của đối tượng gốc.

Hãy lấy một ví dụ trong đó chúng tôi tạo một danh sách có tên Old_list và chuyển một tham chiếu đối tượng đến new_list bằng toán tử

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
3.

Ví dụ 1: Sao chép bằng cách sử dụng = toán tử

old_list = [[1, 2, 3], [4, 5, 6], [7, 8, 'a']]
new_list = old_list

new_list[2][2] = 9

print('Old List:', old_list)
print('ID of Old List:', id(old_list))

print('New List:', new_list)
print('ID of New List:', id(new_list))

Khi chúng tôi chạy trên chương trình, đầu ra sẽ là:

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168

Như bạn có thể thấy từ đầu ra, cả hai biến Old_List và New_list chia sẻ cùng một ID i.e

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
5.

Vì vậy, nếu bạn muốn sửa đổi bất kỳ giá trị nào trong new_list hoặc old_list, thay đổi có thể nhìn thấy trong cả hai.


Về cơ bản, đôi khi bạn có thể muốn có các giá trị ban đầu không thay đổi và chỉ sửa đổi các giá trị mới hoặc ngược lại. Trong Python, có hai cách để tạo bản sao:

  1. Bản sao nông
  2. Sao chép sâu

Để làm cho các bản sao này hoạt động, chúng tôi sử dụng mô -đun

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
6.


Sao chép mô -đun

Chúng tôi sử dụng mô -đun

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
6 của Python cho các hoạt động sao chép nông và sâu. Giả sử, bạn cần sao chép danh sách hỗn hợp nói x. Ví dụ:

import copy
copy.copy(x)
copy.deepcopy(x)

Ở đây,

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
8 trả về một bản sao nông của x. Tương tự,
Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
9 Trả về một bản sao sâu của x.


Bản sao nông

Sao chép sâu

Để làm cho các bản sao này hoạt động, chúng tôi sử dụng mô -đun

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
6.

Sao chép mô -đun

import copy

old_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = copy.copy(old_list)

print("Old list:", old_list)
print("New list:", new_list)

Chúng tôi sử dụng mô -đun

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
6 của Python cho các hoạt động sao chép nông và sâu. Giả sử, bạn cần sao chép danh sách hỗn hợp nói x. Ví dụ:

Old list: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
New list: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Ở đây,

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
8 trả về một bản sao nông của x. Tương tự,
Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
9 Trả về một bản sao sâu của x.

Một bản sao nông tạo ra một đối tượng mới lưu trữ tham chiếu của các phần tử gốc.

Vì vậy, một bản sao nông không tạo ra một bản sao của các đối tượng lồng nhau, thay vào đó, nó chỉ sao chép tham chiếu của các đối tượng lồng nhau. Điều này có nghĩa là, một quá trình sao chép không tái diễn hoặc tạo các bản sao của chính các đối tượng lồng nhau.


Ví dụ 2: Tạo bản sao bằng cách sử dụng bản sao nông cạn

import copy

old_list = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
new_list = copy.copy(old_list)

old_list.append([4, 4, 4])

print("Old list:", old_list)
print("New list:", new_list)

Khi chúng tôi chạy chương trình, đầu ra sẽ là:

Old list: [[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4]]
New list: [[1, 1, 1], [2, 2, 2], [3, 3, 3]]

Trong chương trình trên, chúng tôi đã tạo một danh sách lồng nhau và sau đó sao chép nông cạn bằng phương pháp

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
8.

Điều này có nghĩa là nó sẽ tạo ra đối tượng mới và độc lập với cùng một nội dung. Để xác minh điều này, chúng tôi in cả Old_List và New_List.


Để xác nhận rằng new_list khác với old_list, chúng tôi cố gắng thêm đối tượng lồng nhau mới & nbsp; vào bản gốc và kiểm tra nó.

Ví dụ 3: Thêm [4, 4, 4] vào old_list, sử dụng bản sao nông cạn

Khi chúng tôi chạy chương trình, đầu ra sẽ là:

Old list: [[1, 1, 1], [2, 'AA', 2], [3, 3, 3]]
New list: [[1, 1, 1], [2, 'AA', 2], [3, 3, 3]]

Trong chương trình trên, chúng tôi đã tạo một danh sách lồng nhau và sau đó sao chép nông cạn bằng phương pháp

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
8.


Sao chép sâu

Để làm cho các bản sao này hoạt động, chúng tôi sử dụng mô -đun

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
6.

Sao chép mô -đun

Chúng tôi sử dụng mô -đun Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ID of Old List: 140673303268168 New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ID of New List: 1406733032681686 của Python cho các hoạt động sao chép nông và sâu. Giả sử, bạn cần sao chép danh sách hỗn hợp nói x. Ví dụ:

import copy

old_list = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
new_list = copy.deepcopy(old_list)

print("Old list:", old_list)
print("New list:", new_list)

Khi chúng tôi chạy chương trình, đầu ra sẽ là:

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
0

Trong chương trình trên, chúng tôi đã tạo một danh sách lồng nhau và sau đó sao chép nông cạn bằng phương pháp

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
8.

Điều này có nghĩa là nó sẽ tạo ra đối tượng mới và độc lập với cùng một nội dung. Để xác minh điều này, chúng tôi in cả Old_List và New_List.


Để xác nhận rằng new_list khác với old_list, chúng tôi cố gắng thêm đối tượng lồng nhau mới & nbsp; vào bản gốc và kiểm tra nó.

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
1

Khi chúng tôi chạy chương trình, đầu ra sẽ là:

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
2

Trong chương trình trên, chúng tôi đã tạo một danh sách lồng nhau và sau đó sao chép nông cạn bằng phương pháp

Old List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of Old List: 140673303268168

New List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
ID of New List: 140673303268168
8.

Một bản sao nông trong Python là gì?

Một bản sao nông có nghĩa là xây dựng một đối tượng bộ sưu tập mới và sau đó điền nó với các tham chiếu đến các đối tượng con được tìm thấy trong bản gốc. Về bản chất, một bản sao nông chỉ là một cấp độ sâu. Quá trình sao chép không tái phát và do đó sẽ không tạo bản sao của chính các đối tượng con.constructing a new collection object and then populating it with references to the child objects found in the original. In essence, a shallow copy is only one level deep. The copying process does not recurse and therefore won't create copies of the child objects themselves.

Bản sao nông là gì với một chương trình ví dụ là gì?

Một bản sao nông của một đối tượng là một đối tượng mới có các biến thể hiện giống hệt với đối tượng cũ.Ví dụ, một bản sao nông của một bộ có cùng thành viên với bộ cũ và chia sẻ các đối tượng với bộ cũ thông qua các con trỏ.Bản sao nông đôi khi được cho là sử dụng ngữ nghĩa tham chiếu.a new object whose instance variables are identical to the old object. For example, a shallow copy of a Set has the same members as the old Set and shares objects with the old Set through pointers. Shallow copies are sometimes said to use reference semantics.

Bản sao nông và sâu là gì giải thích từng ví dụ?

Trong bản sao nông, một bản sao của đối tượng gốc được lưu trữ và chỉ có địa chỉ tham chiếu cuối cùng được sao chép. Bản sao sâu, bản sao của đối tượng gốc và các bản sao lặp đi lặp lại được lưu trữ. In Deep copy, the copy of the original object and the repetitive copies both are stored.

Sao chép () là một bản sao nô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.Như bạn có thể thấy rằng cả hai đều có cùng một giá trị nhưng có ID khác nhau., and deepcopy() returns a deep copy of the list. As you can see that both have the same value but have different IDs.