Почему этот код печатает True
@python_quizРазберем этот квиз
Короткий фрагмент кода:

В этой статье разберём, как работают min с ключом, проверка идентичности через is и почему результат именно такой.
Разбор по шагам
- min(users, key=...)
- Функция min итерируется по элементам списка users.
- Для каждого элемента вычисляется значение ключа: здесь lambda u: len(u['logins']).
- Выбирается элемент с минимальным значением ключа.
- Если несколько элементов имеют одинаковое минимальное значение, min вернёт первый из них по порядку.
- Оператор is
- is проверяет идентичность объектов (то есть ссылаются ли две переменные на один и тот же объект в памяти).
- Это не то же самое, что == (сравнение по значению).
- В нашем списке
- users[0]['logins'] — пустой список (len = 0).
- users[1]['logins'] — список с одним элементом (len = 1).
- Минимум по длине логинов — первый элемент списка users[0].
- min возвращает сам объект users[0] (не копию).
- Поэтому сравнение с пользователем из списка через is даёт True.
Демонстрация: что реально происходит
Запустим тот же код и пару вариаций:

Вариант с одинаковыми длинами (tie-breaker):

Вариант с внешним, но равным по содержимому объектом:

Анализ других возможных исходов (кратко)
- False: мог бы появиться, если бы min вернул другой объект (например, если элемент с минимальным ключом — не users[0]). В текущих данных это не так.
TypeError: не случится, потому что len применяется к спискам, а key-функция корректна для всех элементов.ValueError: не возникнет, min бросаетValueErrorтолько при пустой последовательности; здесь список не пуст.
Выводы
- min при передаче key возвращает сам элемент из итерируемого объекта (по ссылке), не копию.
- Оператор is проверяет именно идентичность объектов, поэтому сравнение с users[0] вернёт True, когда min вернёт тот же объект.
- При равных значениях ключа min возвращает первый встретившийся минимальный элемент.