Отличия reverse() от reversed(), sort() от sorted(), copy() от deepcopy()
1. reverse()
vs reversed()
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()
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()
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?