Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Sự khác biệt giữa set() và frozenset() trong Python
Trong Python, hai hàm có sẵn là set() và frozenset() cung cấp cách tạo các tập hợp (sets) với những đặc điểm riêng biệt. Mặc dù cả hai đều cho phép lưu trữ các phần tử không trùng lặp, set() hỗ trợ tính năng thay đổi (mutable), trong khi frozenset() là dạng tập hợp cố định (immutable). Việc hiểu sự khác biệt giữa set() và frozenset() sẽ giúp bạn chọn lựa công cụ phù hợp tùy theo nhu cầu xử lý dữ liệu.

Set() trong Python
Set là một tập hợp không có thứ tự và không được đánh chỉ mục của các phần tử duy nhất. Set là mutable (có thể thay đổi), tức là bạn có thể thay đổi các phần tử của nó bằng các hàm như add(), remove(), v.v. Vì các phần tử có thể thay đổi và không có thứ tự, nên chúng không có giá trị hash, do đó bạn không thể truy cập phần tử bằng chỉ mục.
Lưu ý: Set không thể được sử dụng làm key trong dictionary hoặc làm phần tử của một set khác nhưng có thể được dùng làm giá trị trong dictionary.
Một set được biểu diễn bằng cặp ngoặc nhọn {} hoặc sử dụng set(). Nếu bạn dùng {} mà không có phần tử nào, Python sẽ tạo ra một dictionary thay vì set. Để tạo một set rỗng, bạn cần sử dụng set().
Bài viết này được đăng tại [free tuts .net]
Các ví dụ thao tác trên set:
fruits = {"Apple", "Banana", "Cherry", "Apple", "Kiwi"}
print('Các phần tử duy nhất:', fruits)
# Thêm phần tử mới
fruits.add("Orange")
print('Sau khi thêm phần tử mới:', fruits)
# Kích thước của set
print('Kích thước của set:', len(fruits))
# Kiểm tra sự tồn tại của phần tử trong set
print('Apple có trong set:', "Apple" in fruits)
print('Mango có trong set:', "Mango" in fruits)
# Xóa phần tử khỏi set
fruits.remove("Mango")
print('Sau khi xóa phần tử:', fruits)
# Loại bỏ phần tử khỏi set (nếu không tồn tại sẽ không báo lỗi)
fruits.discard("Mango")
print('Sau khi loại bỏ phần tử:', fruits)
Kết quả:
Các phần tử duy nhất: {'Kiwi', 'Apple', 'Cherry', 'Banana'}
Sau khi thêm phần tử mới: {'Kiwi', 'Orange', 'Banana', 'Apple', 'Cherry'}
Kích thước của set: 5
Apple có trong set: True
Mango có trong set: False
Traceback (most recent call last):
...
KeyError: 'Mango'
Ở đây, remove() sẽ tạo ra lỗi nếu phần tử không có trong set, trong khi discard() sẽ không báo lỗi.
Frozenset() trong Python
Frozenset cũng là một tập hợp không có thứ tự và không đánh chỉ mục của các phần tử duy nhất. Tuy nhiên, frozenset là immutable (bất biến), nghĩa là bạn không thể thay đổi các phần tử của nó sau khi tạo.
Frozenset có thể được sử dụng làm key trong dictionary hoặc là phần tử của một set khác vì nó có thể hash được. Để tạo frozenset, bạn sử dụng hàm frozenset().
Ví dụ về frozenset:
fruits = {"Apple", "Banana", "Cherry", "Apple", "Kiwi"}
basket = frozenset(fruits)
print('Các phần tử duy nhất:', basket)
# Thử thêm phần tử mới sẽ gây lỗi
basket.add("Orange")
print('Sau khi thêm phần tử mới:', basket)
Kết quả:
Các phần tử duy nhất: frozenset({'Kiwi', 'Cherry', 'Apple', 'Banana'})
Traceback (most recent call last):
...
AttributeError: 'frozenset' object has no attribute 'add'
So sánh Set và Frozenset qua ví dụ
# Tạo frozenset từ dictionary
student = {"Name": "John", "Age": "25", "Gender": "Male"}
key = frozenset(student)
print("Các key là:", key)
Kết quả:
Các key là: frozenset({'Age', 'Name', 'Gender'})
Các thao tác khác trên Frozenset và Set
numbers1 = frozenset([1, 2, 3, 4, 5])
numbers2 = frozenset([2, 3, 4, 5])
# Hợp cả hai tập hợp
combined = numbers1 | numbers2
print("Hợp của hai tập hợp:", combined)
# Chọn các phần tử chung
intersect = numbers1 & numbers2
print("Phần tử chung:", intersect)
# Lấy các phần tử không chung
difference = numbers1 - numbers2
print("Phần tử khác biệt:", difference)
# Kiểm tra quan hệ
print("Disjoint:", numbers1.isdisjoint(numbers2))
print("Subset:", numbers1.issubset(numbers2))
print("Superset:", numbers1.issuperset(numbers2))
Kết quả:
Hợp của hai tập hợp: frozenset({1, 2, 3, 4, 5})
Phần tử chung: frozenset({2, 3, 4, 5})
Phần tử khác biệt: frozenset({1})
Disjoint: False
Subset: False
Superset: True
Kết bài
Mình vừa tìm hiểu về set và frozenset trong Python cũng như các thao tác có thể thực hiện trên chúng. Set phù hợp với các tình huống cần thay đổi dữ liệu, trong khi frozenset là lựa chọn tốt khi cần tập hợp bất biến.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng