← Назад к вопросам

Какие знаешь коллекции в Python?

1.0 Junior🔥 61 комментариев
#Автоматизация тестирования#Другое#Инструменты тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Коллекции в Python: обзор и ключевые особенности

В Python под коллекциями обычно понимают встроенные структуры данных для хранения и организации наборов элементов. Они делятся на изменяемые (mutable) и неизменяемые (immutable), а также на упорядоченные (ordered) и неупорядоченные (unordered). Вот основные типы коллекций, которые я активно использую в тестировании и разработке:

1. Встроенные коллекции (основные)

Список (list) — изменяемая, упорядоченная коллекция:

  • Позволяет дубликаты, индексируется, поддерживает срезы.
  • В тестировании часто используется для хранения наборов данных, параметризации тестов.
test_cases = [1, 2, 3, 2, 5]  # Дубликаты разрешены
test_cases.append(6)  # Изменяемость

Кортеж (tuple) — неизменяемая, упорядоченная коллекция:

  • Гарантирует целостность данных, используется для констант, возврата нескольких значений.
  • В QA полезен для фиксации тестовых данных, которые не должны меняться.
test_config = ('localhost', 8080, 'https')  # Неизменяемая конфигурация

Словарь (dict) — изменяемая, неупорядоченная (до Python 3.7), упорядоченная (с Python 3.7+) коллекция пар ключ-значение:

  • Ключи уникальны, значения могут дублироваться.
  • Основной инструмент для работы с JSON, конфигами, параметрами тестов.
test_env = {'url': 'https://api.test.com', 'timeout': 5}
test_env['retries'] = 3  # Динамическое добавление

Множество (set) — изменяемая, неупорядоченная коллекция уникальных элементов:

  • Эффективные операции проверки принадлежности, удаления дублей.
  • В тестировании используется для валидации уникальности данных.
user_ids = {101, 102, 103, 101}  # {101, 102, 103} - дубли удалены

frozenset — неизменяемая версия множества:

  • Может быть элементом другого множества или ключом словаря.
fixed_set = frozenset([1, 2, 3])

2. Специализированные коллекции из модуля collections

Модуль collections предоставляет высокопроизводительные альтернативы встроенным типам:

  • namedtuple — кортеж с именованными полями для читаемого кода:
from collections import namedtuple
TestCase = namedtuple('TestCase', ['id', 'input', 'expected'])
test = TestCase(1, 'input_data', 'success')
  • deque — двусторонняя очередь для быстрых операций с начала и конца:
from collections import deque
test_queue = deque(['test1', 'test2'])
test_queue.appendleft('urgent_test')  # Эффективно
  • Counter — словарь для подсчета хешируемых объектов:
from collections import Counter
test_results = ['pass', 'fail', 'pass', 'pass']
counts = Counter(test_results)  # {'pass': 3, 'fail': 1}
  • defaultdict — словарь со значениями по умолчанию:
from collections import defaultdict
test_groups = defaultdict(list)
test_groups['api'].append('test_login')  # Не нужно проверять наличие ключа
  • OrderedDict — словарь с гарантированным порядком (особенно актуально до Python 3.7):
from collections import OrderedDict
test_steps = OrderedDict([('setup', 1), ('execute', 2), ('teardown', 3)])

3. Практическое применение в QA

При выборе коллекции я руководствуюсь требованиями задачи:

  • Тест-кейсы и параметризация: list или tuple для упорядоченных наборов данных.
  • Конфигурация и environment variables: dict для гибкости или namedtuple для неизменяемых структур.
  • Уникальные идентификаторы/данные: set для быстрой проверки дубликатов.
  • Очередь запросов/заданий: deque для FIFO/LIFO операций.
  • Анализ результатов тестов: Counter для статистики, defaultdict для группировки.

Важное понимание: выбор коллекции влияет на производительность (временная сложность операций) и читаемость кода. Например, проверка element in set выполняется за O(1) в среднем, а в списке — за O(n). В тестировании это критично при работе с большими наборами данных.

4. Новые возможности (Python 3.9+)

  • Операторы объединения для dict: dict1 | dict2
  • Аннотации типов для коллекций: list[str], dict[str, int] (из typing)

В контексте QA, коллекции — это фундаментальный инструмент для организации тестовых данных, управления состоянием и анализа результатов. Понимание их особенностей позволяет писать эффективный, поддерживаемый и надежный тестовый код.

Какие знаешь коллекции в Python? | PrepBro