> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/otlichiya-reverse-ot-reversed-sort-ot-sorted-copy-ot-deepcopy.md).

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

### **1. `reverse()` vs `reversed()`**

| Метод / Функция  | Что делает                                          | Возвращает | Изменяет исходный объект?         |
| ---------------- | --------------------------------------------------- | ---------- | --------------------------------- |
| `list.reverse()` | Разворачивает список на месте                       | `None`     | Да                                |
| `reversed(seq)`  | Возвращает итератор с элементами в обратном порядке | Итератор   | Нет (исходный объект не меняется) |

**Пример:**

```python
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)` | Возвращает новый отсортированный список | Новый список | Нет (исходный объект не меняется) |

**Пример:**

```python
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)` | Создаёт **глубокую копию** объекта      | Вложенные объекты тоже копируются, полностью независимая структура                 |

**Пример:**

```python
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()` — полная независимая копия, включая вложенные объекты.
