
В Python функция
frozenset()является встроенной функцией, которая возвращает неизменяемый (замороженный) набор, инициализированный из передаваемого в качестве аргумента итерируемого объекта.
Синтаксис функции frozenset() следующий:
frozenset([iterable])iterable (необязательный): это итерируемый объект (например, список, словарь, set, кортеж).
Если итерируемый объект не указан, функция frozenset() возвращает пустой frozenset.
Пример базового использования функции frozenset():
fs = frozenset([1, 2, 3, 4, 5])
print(fs)
# frozenset({1, 2, 3, 4, 5})В этом примере мы передаем список [1, 2, 3, 4, 5] в функцию frozenset(), которая возвращает объект frozenset, содержащий эти же элементы.
Основное свойство объекта frozenset — неизменяемость. Это означает, что после создания frozenset вы не можете добавить или удалить элементы из него. Попытка это сделать приведет к возникновению TypeError:
fs = frozenset([1, 2, 3, 4, 5])
fs.add(6) # AttributeError: 'frozenset' object has no attribute 'add'
fs.remove(1) # AttributeError: 'frozenset' object has no attribute 'remove'Объекты frozenset могут содержать только неизменяемые (хешируемые) типы данных. Попытка создать frozenset, содержащий изменяемые типы данных, приведет к TypeError:
fs = frozenset([1, 2, [3, 4, 5]]) # TypeError: unhashable type: 'list'Благодаря своей неизменяемости объекты frozenset могут быть использованы в качестве ключей словаря:
fs = frozenset([1, 2, 3])
d = {fs: 'Hello'}
print(d)
# {frozenset({1, 2, 3}): 'Hello'}Также объекты frozenset могут быть включены в другие наборы:
fs1 = frozenset([1, 2, 3])
fs2 = set([fs1, 4, 5])
print(fs2)
# {frozenset({1, 2, 3}), 4, 5}Объекты frozenset поддерживают все стандартные операции над множествами, включая объединение (union), пересечение (intersection), разность (difference) и симметричную разность (symmetric difference):
fs1 = frozenset([1, 2, 3, 4, 5])
fs2 = frozenset([4, 5, 6, 7, 8])
print(fs1.union(fs2)) # frozenset({1, 2, 3, 4, 5, 6, 7, 8})
print(fs1.intersection(fs2)) # frozenset({4, 5})
print(fs1.difference(fs2)) # frozenset({1, 2, 3})
print(fs1.symmetric_difference(fs2)) # frozenset({1, 2, 3, 6, 7, 8})Объекты frozenset имеют ряд полезных методов, включая copy(), isdisjoint(), issubset(), issuperset(), и так далее:
fs1 = frozenset([1, 2, 3])
fs2 = frozenset([3, 4, 5])
print(fs1.isdisjoint(fs2)) # False - есть общий элемент 3
print(fs1.issubset(fs2)) # False - fs1 не является подмножеством fs2
print(fs1.issuperset(fs2)) # False - fs1 не является надмножеством fs2При работе с большими объемами данных стоит учесть, что использование frozenset может улучшить производительность по сравнению с обычными множествами (set). Это связано с тем, что frozenset, будучи неизменяемыми, могут быть более эффективно хешированы и использованы в операциях, которые требуют быстрого доступа, например, в качестве ключей словаря.
Так как frozenset является неизменяемым типом данных, вы можете создавать frozenset из других frozenset, что невозможно сделать с обычными множествами:
fs1 = frozenset([1, 2, 3])
fs2 = frozenset([fs1, 4, 5])
print(fs2)
# frozenset({frozenset({1, 2, 3}), 4, 5})Это может быть полезно в ситуациях, когда необходимо сохранить состояние групп элементов, которые сами являются группами.
frozenset может быть использован с конструкциями вроде list comprehension, что позволяет удобно генерировать наборы на основе каких-либо условий:
numbers = [1, 2, 3, 4, 5, 6]
even_frozenset = frozenset(n for n in numbers if n % 2 == 0)
print(even_frozenset)
# frozenset({2, 4, 6})В этом примере мы создаем frozenset, содержащий только четные числа из списка numbers.
Функция frozenset() в Python предоставляет удобный способ создания неизменяемых наборов, которые могут быть использованы в качестве ключей словаря и включены в другие наборы. Это делает их полезными во многих ситуациях, где требуется неизменяемость и возможность выполнения операций над множествами.
Содержание: