В 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 предоставляет удобный способ создания неизменяемых наборов, которые могут быть использованы в качестве ключей словаря и включены в другие наборы. Это делает их полезными во многих ситуациях, где требуется неизменяемость и возможность выполнения операций над множествами.
Содержание: