SkillPy

sort vs sorted в Python: в чём разница

Время чтения8 мин чтения
Опубликовано29 сентября 2026 г.
Легко
Python
Списки
Методы
Начинающим
sort vs sorted в Python: в чём разница

sort и sorted в Python делают одно — упорядочивают элементы, — но ведут себя по-разному. .sort() — это метод списка: он меняет список на месте и возвращает None. sorted() — функция: она не трогает оригинал, а возвращает новый отсортированный список. Разберём разницу и частую ловушку.

Коротко

items.sort() сортирует сам список и возвращает None — присваивать результат не нужно. sorted(items) оставляет оригинал нетронутым и отдаёт новый отсортированный список — его как раз нужно сохранить. Нужен оригинал дальше — бери sorted(), не нужен — можно .sort().

# .sort() — на месте
a = [3, 1, 2]
a.sort()
print(a)

# sorted() — новый список, оригинал цел
b = [3, 1, 2]
new = sorted(b)
print(new)
print(b)
[1, 2, 3]
[1, 2, 3]
[3, 1, 2]

a.sort() переставил элементы прямо в a. sorted(b) создал новый список new, а b остался в исходном порядке. Про списки и их методы — в гайде Списки в Python: создание, методы и срезы.

sort vs sorted в Python: сравнение в одной таблице

Критерийitems.sort()sorted(items)
Где доступенВ стандартных типах Python — у listДля любого перебираемого объекта
Меняет исходный объектДаНет
Что возвращаетNoneНовый список
Второй список с результатомНе создаётСоздаёт
Параметры key и reverseПоддерживаетПоддерживает

Когда что использовать

Бери sorted(), когда исходный порядок ещё понадобится или когда сортируешь не список, а другой перебираемый объект. Бери .sort(), когда оригинал больше не нужен и не хочется создавать второй список с результатом. В большинстве обычных случаев итоговый порядок элементов получится одинаковым — выбор зависит от того, нужен ли исходный список дальше.

Параметры key и reverse работают одинаково

Оба инструмента принимают параметр key, который указывает, по какому признаку сравнивать элементы, и reverse=True для обратного порядка. Разница остаётся прежней: .sort() меняет список, а sorted() создаёт новый.

names = ["Алексей", "Ян", "Мария"]

short_first = sorted(names, key=len)
print(short_first)
print(names)

names.sort(key=len, reverse=True)
print(names)
['Ян', 'Мария', 'Алексей']
['Алексей', 'Ян', 'Мария']
['Алексей', 'Мария', 'Ян']

key=len сортирует строки по длине. Сначала sorted() создал отдельный список short_first, поэтому исходный names сохранил порядок. Затем .sort() перестроил уже сам names, а reverse=True расположил строки от самой длинной к самой короткой.

Что sorted возвращает для других объектов?

sorted() принимает любой перебираемый объект, но результат всегда один и тот же по типу — новый список. Для строки это список символов, для кортежа — список его элементов, а для словаря — список отсортированных ключей.

print(sorted("cab"))
print(sorted((3, 1, 2)))
print(sorted({"b": 2, "a": 1}))
['a', 'b', 'c']
[1, 2, 3]
['a', 'b']

У .sort() то же поведение, что у .append() и .reverse(): эти методы меняют список на месте и возвращают None. Но это не универсальное правило для всех изменяющих методов — например, .pop() меняет список и возвращает удалённый элемент. Изменяемые и неизменяемые типы подробно разобраны в гайде Типы данных в Python: полный гайд для начинающих.

Короткие ответы на вопросы

В чём разница sort и sorted?

.sort() — метод, сортирует список на месте и возвращает None. sorted() — функция, возвращает новый отсортированный список, не меняя оригинал.

Почему после a = a.sort() список стал None?

Потому что .sort() возвращает None, а не список. Правильно: либо a.sort() без присваивания, либо a = sorted(a).

Можно ли применить sorted к строке или словарю?

Да. Для строки sorted() вернёт список символов, а для словаря — список отсортированных ключей. Встроенный метод list.sort() предназначен именно для списков.

Кот-наставник

— Простое правило: .sort() меняет список и отдаёт None, sorted() не трогает оригинал и отдаёт новый список.

— И не пиши a = a.sort() — получишь None. Нужен результат отдельно — бери sorted().

Сортировка списков — на практике

На SkillPy ты сортируешь списки сам, а AI-наставник ловит момент, когда .sort() вернул None, и объясняет, где нужен sorted(). Он понимает твой код, а не сверяет с шаблоном.