Việc sao chép tập hợp trong Python đề cập đến việc tạo ra một set mới chứa các phần tử giống như một tập hợp đã tồn tại. Khác với việc gán biến đơn giản, điều này tạo ra một tham chiếu đến tập hợp gốc, việc sao chép đảm bảo rằng những thay đổi được thực hiện trên tập hợp đã sao chép sẽ không ảnh hưởng đến tập hợp gốc, và ngược lại.
Có nhiều phương pháp để sao chép một tập hợp trong Python, bao gồm việc sử dụng phương thức copy(), hàm set() hoặc hiểu tập hợp (set comprehension).
Phương thức copy() trong lớp set được sử dụng để tạo một bản sao nông của một đối tượng set.
Sao chép nông có nghĩa là phương thức tạo ra một đối tượng bộ sưu tập mới, nhưng không tạo ra bản sao của các đối tượng nằm bên trong bộ sưu tập gốc. Thay vào đó, nó sao chép các tham chiếu đến các đối tượng này.
Do đó, nếu bộ sưu tập gốc chứa các đối tượng có thể thay đổi (như danh sách, từ điển hoặc các tập hợp khác), các sửa đổi đối với những đối tượng này sẽ được phản ánh trong cả bộ sưu tập gốc và bộ sưu tập đã sao chép.
Dưới đây là cú pháp của phương thức copy() −
set.copy()
Phương thức copy() trả về một tập hợp mới, là bản sao nông của tập hợp hiện có.
Trong ví dụ sau, chúng ta đang tạo một bản sao của tập hợp "lang1" và lưu nó vào "lang2", sau đó truy xuất cả hai tập hợp và địa chỉ bộ nhớ của chúng bằng cách sử dụng id().
Sau khi thêm một phần tử vào "lang1", chúng tôi lấy lại cả hai tập hợp và địa chỉ bộ nhớ của chúng một lần nữa để cho thấy rằng "lang1" và "lang2" là những bản sao độc lập.
lang1 = {"C", "C++", "Java", "Python"} print ("lang1: ", lang1, "id(lang1): ", id(lang1)) lang2 = lang1.copy() print ("lang2: ", lang2, "id(lang2): ", id(lang2)) lang1.add("PHP") print ("After updating lang1") print ("lang1: ", lang1, "id(lang1): ", id(lang1)) print ("lang2: ", lang2, "id(lang2): ", id(lang2))
Output
Điều này sẽ tạo ra đầu ra sau −
lang1: {'Python', 'Java', 'C', 'C++'} id(lang1): 2451578196864 lang2: {'Python', 'Java', 'C', 'C++'} id(lang2): 2451578197312 After updating lang1 lang1: {'Python', 'C', 'C++', 'PHP', 'Java'} id(lang1): 2451578196864 lang2: {'Python', 'Java', 'C', 'C++'} id(lang2): 2451578197312
Hàm set() trong Python được sử dụng để tạo một đối tượng set mới. Nó nhận một iterable làm đối số và chuyển đổi nó thành một tập hợp, loại bỏ bất kỳ phần tử trùng lặp nào trong quá trình này. Nếu không có đối số nào được cung cấp, nó sẽ tạo ra một tập hợp rỗng.
Chúng ta có thể sao chép tập hợp (set) bằng cách sử dụng hàm set() và truyền tập hợp gốc làm đối số cho bộ tạo set (set constructor). Điều này tạo ra một tập hợp mới chứa tất cả các phần tử của tập hợp gốc, đảm bảo rằng bất kỳ sửa đổi nào đối với tập hợp mới sẽ không ảnh hưởng đến tập hợp gốc.
Trong ví dụ này, chúng ta đang tạo một bản sao của "original_set" bằng cách sử dụng hàm set() và lưu trữ nó trong "copied_set" −
# Original set original_set = {1, 2, 3, 4} # Copying the set using the set() function copied_set = set(original_set) print("copied set:", copied_set) # Demonstrating that the sets are independent copied_set.add(5) print("copied set:",copied_set) print("original set:",original_set)
Output
Dưới đây là đầu ra của đoạn mã trên −
copied set: {1, 2, 3, 4} copied set: {1, 2, 3, 4, 5} original set: {1, 2, 3, 4}
Set comprehension là một cách ngắn gọn để tạo ra các tập hợp (sets) trong Python. Nó được sử dụng để tạo ra một tập hợp mới bằng cách lặp qua một đối tượng có thể lặp (iterable) và tùy chọn áp dụng các điều kiện để lọc các phần tử. Cú pháp tương tự như list comprehension nhưng sử dụng dấu ngoặc nhọn {} thay vì dấu ngoặc vuông [] −
{expression for item in iterable if condition}
Chúng ta có thể sao chép tập hợp bằng cách sử dụng set comprehension bằng cách lặp qua các phần tử của tập hợp gốc và trực tiếp tạo ra một tập hợp mới với những phần tử đó.
Trong ví dụ dưới đây, chúng ta tạo một tập hợp gốc có tên là "original_set", sau đó sao chép nó bằng cách sử dụng set comprehension vào "copied_set" −
# Original set original_set = {1, 2, 3, 4, 5} # Copying the set using set comprehension copied_set = {x for x in original_set} print("Copied set:", copied_set)
Output
Đầu ra của đoạn mã trên như được hiển thị dưới đây −
Copied set: {1, 2, 3, 4, 5}