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

В чем разница между массивом и списком в Python?

1.0 Junior🔥 241 комментариев
#Python Core

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

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

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

Разница между массивом и списком в Python

В Python нет встроенного типа данных "массив" как в других языках (Java, C). Вместо этого существует список (list), который часто называют массивом. Однако есть модуль array, который предоставляет истинный массив. Различие между ними фундаментально.

Список (List)

Список — это встроенный тип данных Python, который представляет упорядоченную коллекцию элементов любых типов. Это динамический размер и гетерогенная структура.

# Создание списка
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True, None]

# Динамическое добавление элементов
numbers.append(6)
numbers.extend([7, 8, 9])

# Удаление элементов
numbers.remove(5)
del numbers[0]

# Изменение размера
numbers.pop()

# Вставка в произвольное место
numbers.insert(0, 0)

# Спецификация элемента
print(numbers[2])  # Доступ по индексу
print(numbers[-1])  # Отрицательный индекс

# Срезы
slice_result = numbers[1:4]  # [1, 2, 3]

Характеристики списков:

  • Тип элементов: гетерогенные (любые типы в одном списке)
  • Размер: динамический, может меняться во время выполнения
  • Производительность: медленнее на больших объёмах данных
  • Использование памяти: больше (каждый элемент хранит тип)
  • Гибкость: высокая, множество встроенных методов
  • Изменяемость: mutable (можно изменять)

Массив (Array)

Массив из модуля array — это гомогенная коллекция элементов одного типа с фиксированной структурой. Более эффективен для работы с большими объёмами однотипных данных.

import array

# Создание массива целых чисел
int_array = array.array(i, [1, 2, 3, 4, 5])

# Типы кодов:
# b - signed char (целое число)
# i - int (целое число)
# f - float (число с плавающей точкой)
# d - double (число двойной точности)
# l - long (длинное целое число)

# Операции похожи на списки
int_array.append(6)
int_array[0] = 10
print(int_array[2])

# Но типизация строгая
try:
    int_array.append("string")  # TypeError!
except TypeError as e:
    print(f"Error: {e}")

# Конвертация в список
list_from_array = int_array.tolist()

Характеристики массивов:

  • Тип элементов: гомогенные (все элементы одного типа)
  • Размер: динамический, но оптимизирован
  • Производительность: выше на больших объёмах
  • Использование памяти: экономнее (только данные, без типов)
  • Гибкость: ограниченная (только один тип данных)
  • Изменяемость: mutable (можно изменять)

Сравнение

ПараметрСписокМассив
ГомогенностьГетерогенныйГомогенный
ТипыЛюбые типыОдин тип
ПроизводительностьМедленнееБыстрее
ПамятьБольшеМеньше
ГибкостьВысокаяНизкая
ВстроенностьВстроенный типМодуль array
МетодыМного (append, remove, sort...)Базовые (append, pop...)
СрезыДаНет
ПримечаниеИспользуется 99% времениДля специфических задач

Практический пример

import array
import time

# Список vs Массив — тест производительности
n = 1_000_000

# Список
start = time.time()
list_data = list(range(n))
for i in range(len(list_data)):
    list_data[i] *= 2
list_time = time.time() - start
print(f"List time: {list_time:.4f}s")

# Массив
start = time.time()
array_data = array.array(i, range(n))
for i in range(len(array_data)):
    array_data[i] *= 2
array_time = time.time() - start
print(f"Array time: {array_time:.4f}s")
print(f"Array faster by {list_time / array_time:.2f}x")

NumPy альтернатива

Для научных вычислений и работы с большими массивами данных обычно используется NumPy:

import numpy as np

# NumPy array — оптимален для векторизированных операций
arr = np.array([1, 2, 3, 4, 5], dtype=np.int32)
arr *= 2  # Быстрое векторизированное умножение
print(arr)  # [2 4 6 8 10]

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

Список:

  • Работа с разнородными данными
  • Нужна гибкость и удобство
  • Количество элементов заранее неизвестно
  • Стандартная разработка на Python (99% случаев)

Массив (array):

  • Работа с большими объёмами однотипных данных
  • Критична производительность
  • Нужна минимизация памяти
  • Редко, в специфических задачах

NumPy:

  • Научные вычисления
  • Матричные операции
  • Работа с многомерными данными

В повседневной разработке на Python вы будете использовать списки почти всегда, так как они универсальны и удобны.

В чем разница между массивом и списком в Python? | PrepBro