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 phức hợ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 sao chép 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
Rất dễ dàng để thực hiện các thao tác sao chép/dán Clipboard bằng cách sử dụng ctrl+c và ctrl+v , bạn có thể nghĩ rằng việc thực hiện các thao tác với clipboard bằng ngôn ngữ lập trình có thể khó khăn, nhưng chúng ta có thể thực hiện điều này rất dễ dàng với vài dòng mã bằng python. Python có các thư viện chỉ dành riêng cho các hoạt động của khay nhớ tạm. Trong bài viết ngắn này, chúng ta sẽ xem ba thư viện python như vậy
kẹp kim loạipyperclip có các phương thức copy[] và paste[] để thực hiện thao tác sao chép/dán. Nó là một thư viện đa nền tảng, có nghĩa là chúng ta có thể sử dụng thư viện này trên các hệ điều hành khác nhau. Trước tiên, hãy xem xét các phụ thuộc của pyperclip cần có trong các hệ điều hành khác nhau
Trên Windows, không cần thêm mô-đun
Trên máy Mac, mô-đun pyobjc được sử dụng, quay lại pbcopy và pbpaste cli
mệnh lệnh. [Các lệnh này nên đi kèm với OS X. ]
Trên Linux, cài đặt xclip, xsel hoặc wl-clipboard [dành cho phiên “wayland”] thông qua trình quản lý gói
Ví dụ, trong Debian
Sudo apt-get cài đặt xclip
sudo apt-get cài đặt xsel
Sudo apt-get cài đặt wl-clipboard
Phương pháp để thực hiện sao chép/dán
Pyperclip có các phương thức copy[] và paste[] để thực hiện các thao tác
import pyperclip as pc
x = "Data to be copied to clipboard"
pc.copy[x]
a = pc.paste[]
print[a]
đầu ra
Data to be copied to clipboard
Pyperclip sẽ chuyển đổi mọi loại dữ liệu thành chuỗi
print[type[a]]#output
Các phương pháp khác của pyperclip
- xác định_clipboard[]
Xác định hệ điều hành/nền tảng và thiết lập các hàm copy[] và paste[]
phù hợp
2. waitForNewPaste[thời gian chờ=Không có]
Chức năng này gọi khối cho đến khi một chuỗi văn bản mới tồn tại trên
khay nhớ tạm khác với văn bản ở đó khi chức năng
lần đầu tiên được gọi. Nó trả về văn bản này
Hàm này tăng PyperclipTimeoutException nếu thời gian chờ được đặt thành
một số giây đã trôi qua mà không có văn bản không trống nào được đưa vào
bảng tạm
3. waitForPaste [thời gian chờ = Không]
Hàm này gọi các khối cho đến khi tồn tại một chuỗi văn bản không trống trên
bảng tạm. Nó trả về văn bản này
Hàm này tăng PyperclipTimeoutException nếu thời gian chờ được đặt thành
một số giây đã trôi qua mà không có văn bản không trống nào được đưa vào
bảng tạm
4. set_clipboard[bảng tạm]. Đặt rõ ràng cơ chế clipboard
pyperclip3Mô-đun này tương tự như pyperclip, tất cả các phương thức có sẵn trong pyperclip cũng có trong mô-đun này. Sự khác biệt duy nhất là, nó chuyển đổi mọi loại dữ liệu thành byte
import pyperclip3 as pc
x = "Data to be copied to clipboard"
pc.copy[x]
a = pc.paste[]
print[a]
print[type[a]]
đầu ra
b'Data to be copied to clipboard'
clipboardMô-đun này chỉ có các phương thức copy[] và paste[]. Các phương pháp khác có sẵn trong các thư viện trước đây không có sẵn trong mô-đun này
import clipboard as c
x = "Data to be copied to clipboard"
c.copy[x]
a = c.paste[]
print[a]
print[type[a]]
đầu ra
Data to be copied to clipboard
Phần kết luận
Chúng tôi đã thấy ba mô-đun python [pyperclip, pyperclip3, clipboard] chỉ dành riêng để thực hiện các thao tác với khay nhớ tạm. Tuy nhiên, có những gói trong Python, có các phương thức tích hợp để thực hiện thao tác với khay nhớ tạm, ví dụ: to_clipboard của gấu trúc, tkinter tương tự, PyQT có các phương thức riêng để thực hiện thao tác với khay nhớ tạm