JavaRush /Курсы /Модуль 1: Python Core /Неизменяемое множество — frozenset

Неизменяемое множество — frozenset

Модуль 1: Python Core
7 уровень , 7 лекция
Открыта

8.1 set-кортеж

Коллекция frozenset — это неизменяемый аналог set. Он предоставляет все возможности множества, но не позволяет изменять его элементы после создания. frozenset полезен в ситуациях, когда требуется хранить уникальные элементы и гарантировать, что множество не будет изменено.

Создание frozenset

Для создания frozenset можно использовать функцию frozenset(), передав ей итерируемый объект (список, кортеж, строку и т.д.).

Примеры:

Создание frozenset из списка


# Создание frozenset из списка
fset1 = frozenset([1, 2, 3, 4])
print(fset1)  # Вывод: frozenset({1, 2, 3, 4})

Создание frozenset из строки


# Создание frozenset из строки
fset2 = frozenset("hello")
print(fset2)  # Вывод: frozenset({'h', 'e', 'l', 'o'})

Создание пустого frozenset


# Создание пустого frozenset
fset3 = frozenset()
print(fset3)  # Вывод: frozenset()
        

8.2 Основные методы frozenset

frozenset поддерживает большинство методов, доступных для изменяемых множеств (set), но поскольку он неизменяем, методы, которые изменяют множество, недоступны.

Примеры:

Объединение множеств (union)


fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
            
# Объединение множеств (union)
print(fset1 | fset2)  # Вывод: frozenset({1, 2, 3, 4, 5, 6})
print(fset1.union(fset2))  # Вывод: frozenset({1, 2, 3, 4, 5, 6})
        

Пересечение множеств (intersection)


fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
            
# Пересечение множеств (intersection)
print(fset1 & fset2)  # Вывод: frozenset({3, 4})
print(fset1.intersection(fset2))  # Вывод: frozenset({3, 4})
        

Разность множеств (difference)


fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
            
# Разность множеств (difference) 
print(fset1 - fset2)  # Вывод: frozenset({1, 2})
print(fset1.difference(fset2))  # Вывод: frozenset({1, 2})
        

Симметрическая разность (symmetric difference)


fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
            
# Симметрическая разность (symmetric difference)
print(fset1 ^ fset2)  # Вывод: frozenset({1, 2, 5, 6})
print(fset1.symmetric_difference(fset2))  # Вывод: frozenset({1, 2, 5, 6})
        

8.3 Применение frozenset

frozenset полезен в следующих ситуациях:

Использование в качестве ключа в словарях:

Поскольку frozenset неизменяем, его можно использовать как ключ в словарях.


fset1 = frozenset([1, 2, 3])
fset2 = frozenset([3, 4, 5])
        
d = {fset1: "first", fset2: "second"}
print(d)  # Вывод: {frozenset({1, 2, 3}): 'first', frozenset({3, 4, 5}): 'second'}
    

Хранение неизменяемых множеств:

Если необходимо создать множество уникальных элементов, которое не будет изменено в дальнейшем, frozenset — отличный выбор.

Безопасность данных:

Использование frozenset позволяет гарантировать, что данные не будут случайно изменены в процессе выполнения программы.

2
Задача
Модуль 1: Python Core, 7 уровень, 7 лекция
Недоступна
Заморозка
Заморозка
2
Задача
Модуль 1: Python Core, 7 уровень, 7 лекция
Недоступна
Холодные ключи
Холодные ключи
1
Опрос
Словари в Python, 7 уровень, 7 лекция
Недоступен
Словари в Python
Словари в Python
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Рустем Уровень 14
5 октября 2025
сегодня уже 05.10.2025 - в задачах ничего не поменялось! Видимо этот курс никому организаторам не нужен......
Andrey Kochegarov Уровень 64
17 февраля 2025
Какой метод возвращает индекс первого вхождения подстроки, если она существует в строке? find(substring) Возвращает индекс первого вхождения подстроки или -1, если подстрока не найдена. index(substring) Возвращает индекс первого вхождения подстроки или бросает исключение, если не найдена. Чем дальше тем больше халтуры.
SWK Уровень 26
26 марта 2025
Месяц прошёл, поправить не смогли.
Николай Уровень 17
15 февраля 2025
В уровне строк, лекция про неизменяемые множества, ну да логично же.
Александр Уровень 19 Expert
24 января 2025
Последний пример - использование frozenset в словарях, больше запутывает чем что-то демонстрирует. Кажется интуитивно неправильно использовать сложный объект как индекс простой строки. Возникает избыточность информации. Но есть пример где мне кажется лучше демонстрируется использование неизменяемого множества в словаре:

data = {
    frozenset(["read", "write"]): "Admin",
    frozenset(["read"]): "User"
}
print(data[frozenset(["write", "read"])])  # Вывод: Admin
тут уже виден смысл в такой конструкции )))
Николай Уровень 17
15 февраля 2025
По моему наоборот логично. Показывает что ключи словаря могут быть только неизменяемые объекты, в том числе неизменяемые множества. Правда могли бы заметить (может это дальше будет), что если неизменяемы коллекции (множества и кортежи) содержат изменяемые элементы, то их так же нельзя использовать в качестве ключей словаря.