47просмотров
12.2%от подписчиков
21 марта 2026 г.
Score: 52
⏱️ Big O Breakdown sorted() vs list.sort(): в чём разница по памяти Оба сортируют. Оба используют Timsort. Какова сложность каждого? nums = [3, 1, 4, 1, 5, 9, 2, 6] result = sorted(nums)
nums.sort() Варианты:
А) Оба O(n log n) время, O(1) память
Б) sorted — O(n log n) / O(n), list.sort() — O(n log n) / O(1)
В) Оба O(n log n) время, O(n) память
Г) sorted — O(n), list.sort() — O(n log n) Ответ: Б Алгоритм один и тот же — Timsort, O(n log n) в среднем и худшем случае. Разница в памяти. list.sort() сортирует список на месте. Дополнительная память — O(1), исходный список меняется. sorted() создаёт новый список. Дополнительная память — O(n), исходный остаётся нетронутым. nums = [3, 1, 4, 1, 5] result = sorted(nums)
print(nums) # [3, 1, 4, 1, 5] — не изменился
print(result) # [1, 1, 3, 4, 5] — новый объект nums.sort()
print(nums) # [1, 1, 3, 4, 5] — изменился на месте Ловушка, которую все допускают: def process(data): data.sort() # мутирует оригинал ... my_list = [3, 1, 2]
process(my_list)
print(my_list) # [1, 2, 3] — сюрприз Передал список в функцию, а он изменился снаружи. Если это не задумано — баг. Когда что использовать: list.sort() — когда исходный порядок не нужен и важна память. sorted() — когда нужно сохранить оригинал или сортируешь не список (tuple, generator, любой iterable). Одинаковая нотация O(n log n) не означает одинаковое поведение. Разница в мутабельности и памяти — это детали, которые в продакшене стоят дорого. 🐍Вопросы с собесов -> ProstoPython