Отличия reverse() от reversed(), sort() от sorted(), copy() от deepcopy()

1. reverse() vs reversed()

Метод / Функция
Что делает
Возвращает
Изменяет исходный объект?

list.reverse()

Разворачивает список на месте

None

Да

reversed(seq)

Возвращает итератор с элементами в обратном порядке

Итератор

Нет (исходный объект не меняется)

Пример:

lst = [1, 2, 3]

lst.reverse()
print(lst)  # [3, 2, 1]

lst2 = [1, 2, 3]
rev = reversed(lst2)
print(list(rev))  # [3, 2, 1]
print(lst2)       # [1, 2, 3]  - исходный список не изменился

2. sort() vs sorted()

Метод / Функция
Что делает
Возвращает
Изменяет исходный объект?

list.sort()

Сортирует список на месте

None

Да

sorted(iterable)

Возвращает новый отсортированный список

Новый список

Нет (исходный объект не меняется)

Пример:

lst = [3, 1, 2]

lst.sort()
print(lst)  # [1, 2, 3]

lst2 = [3, 1, 2]
new_lst = sorted(lst2)
print(new_lst)  # [1, 2, 3]
print(lst2)     # [3, 1, 2]  - исходный список не изменился

3. copy() vs deepcopy()

Функция
Что делает
Особенности

copy.copy(obj)

Создаёт поверхностную копию объекта

Если объект содержит вложенные объекты, они не копируются, а остаются ссылками

copy.deepcopy(obj)

Создаёт глубокую копию объекта

Вложенные объекты тоже копируются, полностью независимая структура

Пример:

import copy

lst = [[1, 2], [3, 4]]

shallow = copy.copy(lst)
deep = copy.deepcopy(lst)

shallow[0][0] = 100
print(lst)    # [[100, 2], [3, 4]]  - вложенные списки остались общими

deep[1][1] = 200
print(lst)    # [[100, 2], [3, 4]]  - deepcopy не изменяет исходный список

💡 Вывод:

  • reverse() и sort() — методы, изменяют объект на месте.

  • reversed() и sorted() — функции, возвращают новый объект, исходный не меняют.

  • copy() — поверхностная копия, вложенные объекты остаются общими.

  • deepcopy() — полная независимая копия, включая вложенные объекты.

Last updated

Was this helpful?