Поведение list.sort() в Python: вывод и подводные камни
@python_quizРазберем этот квиз
Коротко о сути: метод list.sort() сортирует список "на месте" и возвращает None. Из-за этого нельзя добывать отсортированный список из значения, возвращаемого методом — нужно смотреть на сам список.
Условие (код для анализа)

Запустим мысленно: метод sort() изменяет nums прямо в памяти, а его возвращаемое значение — None. Поэтому печать покажет:

Разбор вариантов ответов
Ниже перечислены варианты, как они соотносятся с реальным поведением:
- "Выведет: [1, 2, 3] [1, 2, 3]"
Пояснение: неверно, потому что метод sort() не возвращает новый отсортированный список. Он сортирует существующий список, а возвращаемое значение — None. Поэтому первый элемент вывода не может быть списком.
- "Выведет: None [1, 2, 3]"
Пояснение: соответствует поведению метода list.sort() — список nums будет отсортирован на месте, а res получит значение None.
- "Выведет: [3, 1, 2] [1, 2, 3]"
Пояснение: неверно, поскольку res — не копия исходного списка; это значение возвращаемое sort(), то есть None. Первый элемент вывода не останется исходным списком.
- "Ошибка: sort() нельзя вызывать без аргументов"
Пояснение: неверно. sort() можно вызывать без аргументов; у него есть необязательные параметры key и reverse, но они не обязательны.
Демонстрация правильных подходов
Если нужно получить новый отсортированный список, не меняя исходный, используйте встроенную функцию sorted():

Если хотите отсортировать список на месте и не требуется возвращаемое значение, можно использовать list.sort():

Если нужно одновременно получить и отсортированный список, и ссылку на исходный список — разделяйте операции явно (не полагайтесь на возвращаемое значение sort()):

Практические советы
- Помните: list.sort() возвращает None. Это распространённая ловушка при попытке написать цепочку вызовов вроде some_list.sort().another_method().
- Если нужен неизменяемый исходный список — используйте sorted(), он возвращает новый список.
- Для больших данных sorted() и list.sort() одинаково используют Timsort, но sorted() создаёт копию (потребляет память), list.sort() — не создаёт.
Вывод
Метод list.sort() сортирует список на месте и возвращает None. Поэтому при ожидании получить отсортированный список из результата вызова метода вы получите None и отсортированный сам список. В большинстве случаев выбирайте list.sort() для in-place-изменений и sorted() если нужно получить новую отсортированную коллекцию.