← Назад к вопросам

Какие элементы может хранить множество в Python?

1.6 Junior🔥 131 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Элементы множеств в Python

Множества (set) в Python могут хранить только неизменяемые (immutable) и хешируемые элементы. Это ключевое ограничение, которое отличает множества от других коллекций.

Какие типы можно добавить в множество

В множество можно добавлять:

1. Примитивные типы

my_set = {1, 2.5, "hello", True}
print(my_set)  # {True, 2.5, "hello", 1}
  • int, float, bool — целые числа, вещественные числа, булевы значения
  • str — строки любой длины
  • None — значение None

2. Кортежи (tuple)

Кортежи можно добавлять, если они содержат только хешируемые элементы:

s = {(1, 2), (3, 4)}
print(s)  # {(1, 2), (3, 4)}

3. Frozenset — неизменяемое множество

fs = frozenset([1, 2, 3])
s = {fs, "hello"}
print(s)  # {frozenset({1, 2, 3}), 'hello'}

4. Пользовательские классы

Если класс имеет реализованы hash() и eq(), объекты можно добавлять:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __hash__(self):
        return hash((self.x, self.y))
    
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

p1 = Point(1, 2)
p2 = Point(1, 2)
s = {p1, p2}
print(len(s))  # 1

Что НЕЛЬЗЯ добавить в множество

1. Списки (list)

s = {[1, 2, 3]}  # TypeError: unhashable type: 'list'

2. Словари (dict)

s = {{"a": 1}}  # TypeError: unhashable type: 'dict'

3. Изменяемые объекты в целом

Множества используют хеширование для быстрого поиска, поэтому элементы не должны меняться.

4. Множества (set)

s = {{1, 2, 3}}  # TypeError: unhashable type: 'set'

Хотя frozenset можно добавить.

Концепция хеширования

Для добавления в множество объект должен быть хешируемым — иметь функцию hash() и быть неизменяемым. Множества используют хеш для быстрого поиска элементов за O(1).

Практическое применение

# Удаление дубликатов
numbers = [1, 2, 2, 3, 3, 3, 4]
unique = set(numbers)
print(unique)  # {1, 2, 3, 4}

# Быстрая проверка наличия
allowed_ids = {"user_1", "user_2", "user_3"}
if user_id in allowed_ids:  # O(1) операция
    print("Access granted")

Итого: множество хранит только неизменяемые, хешируемые элементы — int, float, str, tuple (с хешируемыми элементами), frozenset и пользовательские объекты с hash() и eq().

Какие элементы может хранить множество в Python? | PrepBro