Bộ bản sao Python

Phương thức

set.copy[]
9 không nhận bất kỳ đối số nào. Nếu bạn cố chuyển một đối số, Python sẽ tăng
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
0. Bạn có thể sửa lỗi này bằng cách không truyền đối số vào phương thức

>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]

Giá trị trả về của Set copy[]

Giá trị trả về của

set.copy[]
9 là một đối tượng
set.copy[]
1 mới chứa tham chiếu đến tất cả các phần tử tập hợp trong tập hợp ban đầu

Sao chép nông và sâu []

Thao tác sao chép

set.copy[]
2 thực hiện một bản sao nông của tập hợp, nghĩa là mỗi phần tử trong tập hợp không được sao chép chính nó. Bộ mới chứa các phần tử giống như bộ ban đầu—nó chỉ là một bộ chứa khác

Điều này đã khiến một số người hỏi. làm thế nào để thực hiện một bản sao sâu của một tập hợp?

? . Không có lợi ích thực tế nào khi sao chép một đối tượng bất biến - nhưng có những nhược điểm thực tế hữu hình như lãng phí bộ nhớ. Do các mẫu truy cập chỉ đọc của các đối tượng không thay đổi, chương trình sẽ hoạt động giống hệt nhau khi làm việc trên một bản sao so với khi làm việc trên đối tượng ban đầu. Đó là lý do tại sao bạn thậm chí không nên sao chép các đối tượng bất biến mà hãy sử dụng lại chúng

Đoạn mã sau cho thấy hàm

set.copy[]
9 tạo một bản sao nông. Khi được kiểm tra bằng cách sử dụng từ khóa “is”, tập hợp được sao chép trỏ đến một vị trí bộ nhớ khác nhưng phần tử tập hợp duy nhất, một bộ, trỏ đến cùng một vị trí bộ nhớ trong cả hai tập hợp

>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True

Độ phức tạp về thời gian của Set copy[] là gì?

Độ phức tạp thời gian chạy của hàm

set.copy[]
9 trên một tập hợp có n phần tử là O[n] vì Python tạo một tập hợp trống mới và thêm một phần tử vào một tập hợp tại một thời điểm. Quá trình này được lặp lại n lần. Mỗi thao tác thêm là O[1] nên tổng độ phức tạp thời gian chạy là O[1] * O[n] mang lại độ phức tạp thời gian chạy tuyến tính

Bạn có thể thấy điều này trong thử nghiệm đơn giản sau đây, nơi chúng tôi chạy phương thức tập hợp nhiều lần để tăng số lượng phần tử tập hợp

Nhân vật. Độ phức tạp thời gian chạy của
set.copy[]
9 tăng xấp xỉ theo mối quan hệ tuyến tính với số lượng phần tử trong tập hợp

Tôi đã chạy thử nghiệm này trên máy tính xách tay Acer Aspire 5 [tôi biết] với bộ xử lý Intel Core i7 [Thế hệ thứ 8] và bộ nhớ 16GB. Đây là mã của thử nghiệm

import matplotlib.pyplot as plt
import random
import time

sizes = [i * 10**5 for i in range[50]]
runtimes = []

for size in sizes:
    s = set[range[size]]

    # Start track time ...
    t1 = time.time[]
    s.copy[]
    t2 = time.time[]
    # .. end track time
    
    runtimes.append[t2-t1]


plt.plot[sizes, runtimes]
plt.ylabel['Runtime [s]']
plt.xlabel['Set Size']

plt.show[]

Các phương thức đặt Python khác

Tất cả các phương thức tập hợp được gọi trên một tập hợp nhất định. Ví dụ: nếu bạn đã tạo tập hợp

set.copy[]
6, bạn sẽ gọi
set.copy[]
7 để xóa tất cả các phần tử của tập hợp. Chúng tôi sử dụng thuật ngữ “tập hợp này” để chỉ tập hợp mà phương thức được thực thi

set.copy[]
8Thêm một phần tử vào tập hợp này
set.copy[]
9Xóa tất cả các phần tử khỏi tập hợp này
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
0Tạo và trả lại một bản sao phẳng của tập hợp này
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
1Tạo và trả lại một tập hợp mới chứa tất cả các phần tử của tập hợp này ngoại trừ những phần tử trong các đối số tập hợp đã cho. Tập hợp kết quả có nhiều nhất nhiều phần tử như bất kỳ tập hợp nào khác.
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
2Xóa tất cả các phần tử khỏi tập hợp này là thành viên của bất kỳ đối số tập hợp đã cho nào.
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
3Xóa một phần tử khỏi tập hợp này nếu nó là thành viên, nếu không thì không làm gì cả.
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
4Tạo và trả về một tập hợp mới chứa tất cả các phần tử là thành viên của tất cả các tập hợp. cái này và cả cái được chỉ định. .
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
5Xóa tất cả các phần tử khỏi tập hợp này mà không phải là thành viên trong tất cả các tập hợp được chỉ định khác.
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
6Trả lại
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
7 nếu không có phần tử nào từ tập hợp này là thành viên của bất kỳ tập hợp cụ thể nào khác. Các tập hợp là rời nhau khi và chỉ khi giao của chúng là tập hợp rỗng.
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
8Trả lại
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
7 nếu tất cả các phần tử của tập hợp này là thành viên của đối số tập hợp đã chỉ định.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
0Trả lại
>>> {1, 2, 3}.copy[{'Alice', 'Bob'}]
Traceback [most recent call last]:
  File "", line 1, in 
    {1, 2, 3}.copy[{'Alice', 'Bob'}]
TypeError: copy[] takes no arguments [1 given]
7 nếu tất cả các phần tử của đối số tập hợp đã chỉ định là thành viên của tập hợp này.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
2Xóa và trả lại phần tử ngẫu nhiên khỏi bộ này. Nếu tập hợp trống, nó sẽ tăng
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
3.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
4Xóa và trả về một phần tử cụ thể khỏi tập hợp này như được xác định trong đối số. Nếu tập hợp không chứa phần tử, nó sẽ tăng
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
3.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
6Trả về một tập hợp mới có các phần tử trong tập hợp này hoặc đối số tập hợp đã chỉ định, nhưng không phải các phần tử là thành viên của cả hai.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
7Thay thế bộ này bằng sự khác biệt đối xứng, tôi. e. , các phần tử trong tập hợp này hoặc đối số tập hợp đã chỉ định, nhưng không phải các phần tử là thành viên của cả hai.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
8Tạo và trả về một tập hợp mới với tất cả các phần tử có trong tập hợp này hoặc trong bất kỳ đối số tập hợp nào đã chỉ định.
>>> s1 = {[1, 2, 3]}
>>> s2 = s1.copy[]
>>> s1.pop[] is s2.pop[]
True
9Cập nhật tập hợp này với tất cả các phần tử có trong tập hợp này hoặc trong bất kỳ đối số tập hợp nào đã chỉ định. Tập hợp kết quả có ít nhất nhiều phần tử như bất kỳ tập hợp nào khác

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Chủ Đề