Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách sử dụng phương thức copy[], với sự trợ giúp của các tình huống sử dụng khác nhau
ví dụ 1. Sao chép bộ Python
Trong ví dụ này, chúng ta sẽ sao chép nội dung của một tập hợp vào một biến khác
Ngoài ra, chúng tôi sẽ sửa đổi tập hợp đã sao chép và quan sát nội dung của cả tập hợp gốc và tập hợp đã sao chép
Chương trình Python
#initialize set
set_1 = {32, 56, 19}
#copy set
set_2 = set_1.copy[]
print['set 1:', set_1]
print['set 2:', set_2]
#some modifications
set_2.add[47]
print['\nafter modifications']
print['set 1:', set_1]
print['set 2:', set_2]
Chạyđầu ra
set 1: {32, 56, 19}
set 2: {32, 56, 19}
after modifications
set 1: {32, 56, 19}
set 2: {32, 56, 19, 47}
Bộ ban đầu không thay đổi
ví dụ 2. Sao chép Đặt thành nhiều biến
Bạn có thể sao chép một tập hợp thành một hoặc nhiều biến trong một câu lệnh. Trong ví dụ này, chúng ta sẽ khởi tạo một tập hợp và sao chép nó vào hai biến
Chương trình Python
#initialize set
set_1 = {32, 56, 19}
#copy set
set_2 = set_3 = set_1.copy[]
print['set 1:', set_1]
print['set 2:', set_2]
print['set 3:', set_3]
Chạyđầu ra
set 1: {32, 56, 19}
set 2: {32, 56, 19}
set 3: {32, 56, 19}
Tóm lược
Trong hướng dẫn về Ví dụ Python này, chúng ta đã học cách sử dụng phương thức copy[] của set class trong Python, với sự trợ giúp của các chương trình ví dụ chi tiết
Một cách tiếp cận đơn giản để có được một bản sao nông của tập hợp sử dụng chức năng tích hợp sẵn copy[]
. Đây là một ví dụ về việc sử dụng nó
1
2
3
4
5
6
7
if __name__ == '__main__'.
nums = {1, 2, 3, 4, 5}
bản sao = nums. bản sao[]
in[bản sao]
Tải xuống Chạy mã
2. Sử dụng Set constructor
Một tùy chọn khác là sử dụng hàm tạo set[]
để sao chép một tập hợp. Điều này được thể hiện dưới đây
1
2
3
4
5
6
7
if __name__ == '__main__'.
nums = {1, 2, 3, 4, 5}
nhân bản = đặt[nums]
in[bản sao]
Tải xuống Chạy mã
3. Sử dụng chức năng copy.copy[]
Mô-đun sao chép cung cấp các quy trình cho các hoạt động sao chép nông và sâu. Một bản sao nông của tập hợp có thể được tạo bằng cách sử dụng copy.copy[]
và một bản sao sâu có thể được tạo bằng hàm copy.deepcopy[]
. Ví dụ,
Các câu lệnh gán trong Python không sao chép các đối tượng, chúng tạo ra các ràng buộc giữa mục tiêu và đối tượng. Đối với các bộ sưu tập có thể thay đổi hoặc chứa các mục có thể thay đổi, đôi khi cần có một bản sao để người dùng có thể thay đổi một bản sao mà không cần thay đổi bản kia. Mô-đun này cung cấp các thao tác sao chép nông và sâu chung chung [được giải thích bên dưới]
Tóm tắt giao diện
sao chép. bản sao[x]Trả lại một bản sao nông của x
sao chép. deepcopy[x[ , ghi nhớ]]Trả lại một bản sao sâu của x
ngoại lệ sao chép. LỗiTăng cho các lỗi mô-đun cụ thể
Sự khác biệt giữa sao chép nông và sâu chỉ liên quan đến các đối tượng phức hợp [các đối tượng chứa các đối tượng khác, như danh sách hoặc thể hiện của lớp]
Một bản sao nông xây dựng một đối tượng ghép mới và sau đó [trong phạm vi có thể] chèn vào đó các tham chiếu tới các đối tượng được tìm thấy trong bản gốc
Một 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 đó.
Hai vấn đề thường tồn tại với thao tác sao chép sâu mà không tồn tại với thao tác sao chép nông
Các đối tượng đệ quy [các đối tượng phức hợp, trực tiếp hoặc gián tiếp, chứa tham chiếu đến chính chúng] có thể gây ra vòng lặp đệ quy
Bởi vì bản sao sâu sao chép mọi thứ mà nó có thể sao chép quá nhiều, chẳng hạn như dữ liệu được chia sẻ giữa các bản sao
Chức năng tránh những vấn đề này bằng cách
giữ một từ điển
memo
các đối tượng đã được sao chép trong quá trình sao chép hiện tại;cho phép các lớp do người dùng định nghĩa ghi đè hoạt động sao chép hoặc tập hợp các thành phần được sao chép
Mô-đun này không sao chép các loại như mô-đun, phương thức, dấu vết ngăn xếp, khung ngăn xếp, tệp, ổ cắm, cửa sổ hoặc bất kỳ loại tương tự nào. Nó thực hiện “sao chép” các hàm và lớp [nông và sâu], bằng cách trả lại đối tượng ban đầu không thay đổi;
Bản sao nông của từ điển có thể được tạo bằng cách sử dụng và của danh sách bằng cách chỉ định một phần của toàn bộ danh sách, ví dụ: copied_list = original_list[:]
Các lớp có thể sử dụng cùng một giao diện để kiểm soát việc sao chép mà chúng sử dụng để kiểm soát việc tẩy. Xem mô tả của mô-đun để biết thông tin về các phương pháp này. Trên thực tế, mô-đun sử dụng các hàm pickle đã đăng ký từ mô-đun
Để một lớp định nghĩa việc triển khai bản sao của riêng mình, nó có thể định nghĩa các phương thức đặc biệt __copy__[]
và deepcopy[]
0. Cái trước được gọi để thực hiện thao tác sao chép nông; . Cái sau được gọi để thực hiện thao tác sao chép sâu; . Nếu việc triển khai deepcopy[]
0 cần tạo một bản sao sâu của một thành phần, thì nó sẽ gọi hàm với thành phần đó làm đối số đầu tiên và từ điển ghi nhớ làm đối số thứ hai. Từ điển ghi nhớ nên được coi là một đối tượng mờ đục