9.1 Особенности массивов постоянного размера
Массивы постоянного размера — это массивы, размер которых определяется при их создании и не может изменяться в процессе выполнения программы. В Python массивы постоянного размера можно создать с помощью библиотеки array или использовать списки, хотя списки в Python могут изменять размер, они используются аналогично массивам в других языках.
Особенности массивов постоянного размера:
- Фиксированный размер: Размер массива задаётся при его создании и не может быть изменён.
- Однородность: Все элементы массива должны быть одного типа.
- Быстрый доступ по индексу: Доступ к элементам массива осуществляется за постоянное время
O(1). - Неизменяемость размера: Количество элементов массива остаётся постоянным, и добавление новых элементов невозможно.
Пример создания массива постоянного размера в Python:
С использованием библиотеки array:
import array
# Создание массива из целых чисел (тип 'i' для int)
arr = array.array('i', [1, 2, 3, 4, 5])
# Доступ к элементам
print(arr[2]) # Вывод: 3
# Изменение значения элемента
arr[2] = 10
print(arr) # Вывод: array('i', [1, 2, 10, 4, 5])
С использованием списка (имитируя массив постоянного размера):
# Создание списка фиксированного размера
arr = [0] * 5
# Инициализация элементов
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
# Доступ к элементам
print(arr[2]) # Вывод: 3
# Изменение значения элемента
arr[2] = 10
print(arr) # Вывод: [1, 2, 10, 4, 5]
9.2 Преимущества и недостатки массивов постоянного размера
У всего есть свои сильные и слабые стороны, у фиксированных массивов они такие.
Преимущества:
- Быстрый доступ по индексу: Доступ к любому элементу массива осуществляется за постоянное время
O(1), что делает массивы очень эффективными для чтения данных. - Простота реализации: Массивы просты в понимании и использовании, их легко реализовать и применять в различных задачах.
- Эффективное использование памяти: Поскольку размер массива фиксирован, память выделяется сразу при создании массива, что позволяет избежать затрат на перераспределение памяти.
- Предсказуемость: Фиксированный размер массива упрощает управление памятью и предсказуемость использования ресурсов.
Недостатки:
- Неизменяемость размера: Размер массива задаётся при его создании и не может быть изменён. Это означает, что нужно заранее знать необходимый размер массива или рисковать избыточным выделением памяти.
- Затраты на вставку и удаление: Вставка и удаление элементов могут быть затратными по времени, так как требуют сдвига элементов. В худшем случае вставка или удаление элемента в середине массива занимает
O(n)времени. - Неэффективное использование памяти: Если массив используется не полностью, то оставшиеся ячейки памяти остаются незаполненными, что может привести к неэффективному использованию памяти.
- Ограниченная гибкость: Массивы не позволяют динамически изменять размер, что делает их менее гибкими по сравнению с динамическими структурами данных, такими как списки.
9.3 Примеры использования и применения
Вот несколько примеров использования и применения массивов постоянного размера.
Пример 1: Таблицы и матрицы
Массивы постоянного размера часто используются для представления таблиц и матриц, где размер известен заранее.
import numpy as np
# Создание 3x3 матрицы с фиксированным размером
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# Доступ к элементам матрицы
print(matrix[1][2]) # Вывод: 6
# Изменение элемента матрицы
matrix[1][2] = 10
print(matrix)
# Вывод:
# [[ 1 2 3]
# [ 4 5 10]
# [ 7 8 9]]
Пример 2: Буферы и кэши
Массивы постоянного размера используются для создания буферов и кэшей, где размер буфера известен заранее и не изменяется.
# Буфер фиксированного размера для чтения данных
buffer_size = 1024
buffer = bytearray(buffer_size)
# Заполнение буфера данными
data = b"Hello, World!"
buffer[:len(data)] = data
print(buffer[:len(data)]) # Вывод: b'Hello, World!'
Пример 3: Хранение данных о времени и датах
Массивы постоянного размера могут использоваться для хранения данных о времени и датах, таких как количество дней в каждом месяце.
В данном примере мы эмулируем поведение фиксированного массива через класс list:
# Количество дней в каждом месяце (не високосный год)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# Доступ к данным
month = 2 # Февраль
print(f"В феврале {days_in_month[month - 1]} дней") # Вывод: В феврале 28 дней
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ