Короткий ответ
Метод 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().