В чем разница между списком (list) и модулем array в Python

«В чем разница между списком (list) и модулем array в Python» — вопрос из категории Python, который задают на 23% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основное различие заключается в типе хранимых элементов и эффективности использования памяти.

  • list — это стандартная, гибкая структура данных в Python. Она может хранить элементы разных типов.
  • array.array — это специализированная структура для хранения элементов одного и того же числового типа (например, только int или float).
Характеристика list (Список) array.array (Массив)
Типы элементов Гетерогенные (разные типы) Гомогенные (один тип)
Память Менее эффективен (хранит указатели на объекты) Более эффективен (хранит значения напрямую)
Гибкость Высокая, множество методов Ограниченная, базовые операции
Назначение Структура общего назначения Компактное хранение числовых данных

Пример:

import array

# Список может содержать элементы разных типов
my_list = [1, "hello", 3.14, True]
print(f"Список: {my_list}")

# Массив требует указания типа и может хранить только элементы этого типа
# 'i' означает signed integer (целое число)
try:
    my_array = array.array('i', [1, 2, 3, 4, 5])
    print(f"Массив: {my_array}")

    # Эта строка вызовет ошибку TypeError, так как 'hello' не является integer
    my_array.append('hello') 
except TypeError as e:
    print(f"Ошибка при добавлении строки в массив: {e}")

Когда что использовать?

  • Используйте list в большинстве случаев. Это стандартный и самый удобный способ работы с последовательностями в Python.
  • Используйте array.array, когда вам нужно компактно хранить большой объем однотипных числовых данных и важна экономия памяти.
  • Для серьезных научных и математических вычислений предпочтительнее использовать numpy.array, который предоставляет значительно большую производительность и функциональность для работы с массивами.