Отличия 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?