Работа со множествами, содержащими вложенные коллекции

Первое выражение вызовет TypeError: списки не хешируются и не могут быть элементами set. Второе допустимо, потому что одноэлементные кортежи из целых чисел хешируемы.

Короткий ответ

Что ответить на собеседовании

Первое выражение вызовет TypeError: списки не хешируются и не могут быть элементами set. Второе допустимо, потому что одноэлементные кортежи из целых чисел хешируемы.

Подробный разбор

Ответ с пояснениями

Условие

Определите, возникнет ли ошибка при выполнении приведённых ниже выражений, и объясните, почему во втором примере используются запятые.

s = set([[1], [2]])
s2 = set([(1,), (2,)])

Ответ

Первое выражение вызовет TypeError: списки не хешируются и не могут быть элементами set. Второе допустимо, потому что одноэлементные кортежи из целых чисел хешируемы.

Запятая создаёт кортеж: (1,) — tuple, а (1) — просто число 1. Поэтому отдельно выполненное второе выражение даст множество {(1,), (2,)} с неопределённым порядком отображения.

В одном последовательном скрипте до s2 выполнение не дойдёт, если ошибка первой строки не перехвачена. Кортеж хешируем не всегда: содержащий список кортеж тоже нельзя добавить в set. Все его элементы должны поддерживать корректный хеш.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее