# Структуры данных

### **Основные структуры данных в Python**

#### 1. **list** — список

* **Мутируемый** (можно изменять элементы).
* Упорядоченный.
* Можно хранить разные типы данных.
* Часто используется для хранения наборов тестовых данных, ответов API, элементов DOM и т. д.

```python
tests = ["login", "payment", "logout"]
tests.append("profile")
```

***

#### 2. **tuple** — кортеж

* **Иммутабельный** (нельзя изменять после создания).
* Упорядоченный.
* Быстрее списка, подходит для константных наборов данных.
* В тестах: часто используется как ключ в словарях или для фиксированных данных.

```python
coords = (10, 20)
```

***

#### 3. **set** — множество

* **Мутируемое**.
* Неупорядоченное.
* Уникальные элементы.
* Быстрые операции поиска и удаления.
* В тестах: удобно сравнивать, что два набора данных совпадают (без учёта порядка).

```python
tags = {"smoke", "regression", "api"}
```

***

#### 4. **frozenset** — неизменяемое множество

* То же, что `set`, но **иммутабельное**.
* Можно использовать как ключ словаря.

```python
immutable_tags = frozenset(["smoke", "api"])
```

***

#### 5. **dict** — словарь

* **Мутируемый**.
* Пары ключ-значение.
* В тестах: хранение конфигураций, JSON-ответов, маппингов.

```python
config = {"url": "https://test.com", "timeout": 30}
```

***

#### 6. **str** — строка

* **Иммутабельная**.
* Последовательность символов.
* В тестах часто обрабатывается при парсинге логов, ответов API, HTML.

```python
message = "Test passed"
```

***

### **Дополнительно из модуля `collections`**

(очень часто спрашивают на Senior-позиции)

* `namedtuple` — кортеж с именованными полями.
* `deque` — двусторонняя очередь (эффективная вставка/удаление с обоих концов).
* `Counter` — подсчёт элементов.
* `defaultdict` — словарь с автоматическим созданием значений по умолчанию.
* `OrderedDict` — словарь с сохранением порядка (в Python 3.7+ `dict` уже упорядочен).

***

### **Важные моменты для собеседования**

* **Мутируемые vs иммутабельные**: список и словарь можно менять, кортеж и строку — нет.
* **Время доступа**: `dict` и `set` работают за O(1) в среднем.
* **Когда использовать**:
  * `list` — когда нужен порядок и дубликаты.
  * `set` — когда нужны уникальные элементы.
  * `dict` — когда нужен доступ по ключу.
  * `tuple` — когда данные не должны меняться.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/struktury-dannykh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
