Короткий ответ
Метод sort() сортирует список на месте (in-place) и возвращает None, а функция sorted() принимает любой итерируемый объект и возвращает новый отсортированный список, оставляя исходный без изменений.
Как это работает подробнее
Выбор между ними зависит от задачи: нужен ли исходный порядок и какой именно объект сортируется.
- Сортировка на месте.
list.sort()изменяет сам список и экономит память, потому что новая коллекция не создаётся. - Новый список.
sorted()работает с любым итерируемым объектом — строкой, кортежем, словарём, множеством — и всегда возвращает список. - Общие параметры. Обе функции поддерживают
reverse=Trueдля сортировки по убыванию и параметрkey— функцию, по результату которой сравниваются элементы, напримерsorted(words, key=len). - Возврат None. Метод
sort()не возвращает отсортированный список, поэтому присваивание его результата переменной теряет данные.
Пример кода
Сортировка на месте и через копию
num = [3, 1, 2]
print(sorted(num)) # [1, 2, 3] — новый список
print(num) # [3, 1, 2] — исходный список не изменился
num.sort() # сортировка на месте
print(num) # [1, 2, 3] — теперь список отсортирован
words = ['bb', 'a', 'ccc']
print(sorted(words, key=len)) # ['a', 'bb', 'ccc'] — по длине словаЧто использовать на практике
- Исходный не нужен. Когда старый порядок не важен и хочется сэкономить память, используй метод
sort(). - Нужен исходный порядок. Если оригинальная коллекция ещё пригодится, применяй
sorted(), который вернёт новую копию. - Не только списки. Для сортировки строк, кортежей или множеств подходит только
sorted()— у этих типов нет методаsort(). - Ключ сравнения. При сортировке объектов по атрибуту задай
key— например,sorted(users, key=lambda u: u.age).
Подводные камни
- None вместо списка. Типичная ошибка — присваивать результат
list.sort()переменной: из-за возвратаNoneданные будут потеряны. - Изменение исходника. Метод
sort()мутирует список — если исходный порядок нужен дальше, прежние данные уже не вернуть. - Смешение типов. При попытке отсортировать элементы разных типов, например числа и строки, Python бросит ошибку сравнения.
Как отвечать на собеседовании
- Дай ключевое различие:
sort()изменяет список на месте и возвращаетNone, аsorted()возвращает новый список, не трогая исходный → приведи пример с обоими вызовами → упомяни, чтоsorted()принимает любые итерируемые объекты, аsort()есть только у списков → добавь проreverseиkey→ предупреди про присваивание результатаsort().