> **Источник:** https://python-all.ru/3.0/library/array.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `array` – эффективные массивы числовых значений

Этот модуль определяет тип объекта, который может компактно представлять массив базовых значений: символы, целые числа, числа с плавающей запятой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип хранимых в них объектов ограничен. Тип задаётся при создании объекта с помощью *кода типа*, который представляет собой один символ. Определены следующие коды типа:

| Код типа | Тип C | Тип Python | Минимальный размер в байтах |
| --- | --- | --- | --- |
| `'b'` | знаковый char | int | 1 |
| `'B'` | беззнаковый char | int | 1 |
| `'u'` | Py\_UNICODE | символ Unicode | 2 |
| `'h'` | знаковый short | int | 2 |
| `'H'` | беззнаковый short | int | 2 |
| `'i'` | знаковый int | int | 2 |
| `'I'` | беззнаковый int | int | 2 |
| `'l'` | знаковый long | int | 4 |
| `'L'` | беззнаковый long | int | 4 |
| `'f'` | float | float | 4 |
| `'d'` | double | float | 8 |

Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией на C). Реальный размер можно получить через атрибут [`itemsize`](https://python-all.ru/3.0/c-api/buffer.html#itemsize).

Модуль определяет следующий тип:

#### `[array.array]array.array(typecode[, initializer])`

Возвращает новый массив, элементы которого ограничены *typecode* и инициализируются из необязательного значения *initializer*, которое должно быть списком, объектом, поддерживающим буферный интерфейс, или итерабельным объектом по элементам соответствующего типа.

Если указан список или строка, начальное значение передаётся методу `fromlist()`, `fromstring()` или `fromunicode()` (см. ниже), чтобы добавить начальные элементы в массив. В противном случае итерабельное начальное значение передаётся методу `extend()`.

#### `[array.ArrayType]array.ArrayType`

Устаревший псевдоним для

[`array()`](https://python-all.ru/3.0/library/array.html#array.array)

.

#### `[array.typecodes]array.typecodes`

Строка со всеми доступными кодами типов.

Объекты array поддерживают обычные операции последовательностей: индексацию, срезы, конкатенацию и умножение. При использовании присваивания срезу присваиваемое значение должно быть объектом array с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError). Объекты array также реализуют интерфейс буфера и могут использоваться везде, где поддерживаются буферные объекты.

Также поддерживаются следующие элементы данных и методы:

#### `[array.array.typecode]array.typecode`

Символ кода типа, использованный для создания массива.

#### `[array.array.itemsize]array.itemsize`

Длина в байтах одного элемента массива во внутреннем представлении.

#### `[array.array.append]array.append(x)`

Добавляет новый элемент со значением

*x*

в конец массива.

#### `[array.array.buffer_info]array.buffer_info()`

Возвращает кортеж `(адрес, длина)`, содержащий текущий адрес в памяти и количество элементов в буфере, используемом для хранения содержимого массива. Размер буфера в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей сути небезопасными) интерфейсами ввода-вывода, которые требуют адреса памяти, например, определённые операции `ioctl`. Возвращаемые числа действительны, пока существует массив и к нему не применяются операции, изменяющие длину.

> **Примечание**
>
> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости и не должен использоваться в новом коде. Буферный интерфейс описан в [*Buffer Objects*](https://python-all.ru/3.0/c-api/buffer.html#bufferobjects).

#### `[array.array.byteswap]array.byteswap()`

«Байт-своп» (перестановка байтов) всех элементов массива. Это поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов возбуждается

[`RuntimeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.RuntimeError)

. Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов.

#### `[array.array.count]array.count(x)`

Возвращает количество вхождений

*x*

в массиве.

#### `[array.array.extend]array.extend(iterable)`

Добавляет элементы из

*iterable*

в конец массива. Если

*iterable*

является другим массивом, он должен иметь

*точно такой же*

типовой код; в противном случае будет возбуждено

[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)

. Если

*iterable*

не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.

#### `[array.array.fromfile]array.fromfile(f, n)`

Читает

*n*

элементов (в машинном представлении) из файлового объекта

*f*

и добавляет их в конец массива. Если доступно меньше

*n*

элементов, возбуждается

[`EOFError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.EOFError)

, но доступные элементы всё равно вставляются в массив.

*f*

должен быть реальным встроенным файловым объектом; что-то другое с

`read()`

методом не подойдёт.

#### `[array.array.fromlist]array.fromlist(list)`

Добавляет элементы из списка. Аналогично

`for x in list: a.append(x)`

, за исключением того, что в случае ошибки типа массив остаётся без изменений.

#### `[array.array.fromstring]array.fromstring(s)`

Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода

[`fromfile()`](https://python-all.ru/3.0/library/array.html#array.array.fromfile)

).

#### `[array.array.fromunicode]array.fromunicode(s)`

Расширяет этот массив данными из указанной строки Unicode. Массив должен быть типа

`'u'`

; в противном случае возбуждается

[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)

. Используйте

`array.fromstring(unicodestring.encode(enc))`

, чтобы добавить данные Unicode в массив другого типа.

#### `[array.array.index]array.index(x)`

Возвращает наименьшее

*i*

, такое, что

*i*

является индексом первого вхождения

*x*

в массиве.

#### `[array.array.insert]array.insert(i, x)`

Вставляет новый элемент со значением

*x*

в массив перед позицией

*i*

. Отрицательные значения интерпретируются как смещение от конца массива.

#### `[array.array.pop]array.pop([i])`

Удаляет элемент с индексом

*i*

из массива и возвращает его. Необязательный аргумент по умолчанию равен

`-1`

, так что по умолчанию удаляется и возвращается последний элемент.

#### `[array.array.remove]array.remove(x)`

Удаляет первое вхождение

*x*

из массива.

#### `[array.array.reverse]array.reverse()`

Изменяет порядок элементов в массиве на обратный.

#### `[array.array.tofile]array.tofile(f)`

Записывает все элементы (в машинном представлении) в файловый объект

*f*

.

#### `[array.array.tolist]array.tolist()`

Преобразует массив в обычный список с теми же элементами.

#### `[array.array.tostring]array.tostring()`

Преобразует массив в машинные значения и возвращает строковое представление (ту же последовательность байтов, которая была бы записана в файл методом

[`tofile()`](https://python-all.ru/3.0/library/array.html#array.array.tofile)

).

#### `[array.array.tounicode]array.tounicode()`

Преобразует массив в строку Unicode. Массив должен быть типа

`'u'`

; в противном случае возбуждается

[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)

. Используйте

`array.tostring().decode(enc)`

, чтобы получить строку Unicode из массива другого типа.

При выводе или преобразовании объекта массива в строку он представляется как `array(typecode, initializer)`. Параметр *initializer* опускается, если массив пуст; в противном случае это строка, если *typecode* равен `'u'`, иначе это список чисел. Гарантируется, что строку можно преобразовать обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/3.0/library/functions.html#eval) при условии, что функция [`array()`](https://python-all.ru/3.0/library/array.html#array.array) была импортирована через `from array import array`. Примеры:

```python
array('l')
array('u', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])
```

> **См. также**
>
> **Модуль [`struct`](https://python-all.ru/3.0/library/struct.html#module-struct)**
>
> Упаковка и распаковка разнородных двоичных данных.
>
> **Модуль [`xdrlib`](https://python-all.ru/3.0/library/xdrlib.html#module-xdrlib)**
>
> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.
>
> **[Руководство по Numerical Python](https://python-all.ru/3.0/library/array.html)**
>
> Расширение Numeric Python (NumPy) определяет другой тип массива; см.
>
> [http://numpy.sourceforge.net/](https://python-all.ru/3.0/library/array.html)
>
> для получения дополнительной информации о Numerical Python. (PDF-версия руководства NumPy доступна по адресу
>
> [http://numpy.sourceforge.net/numdoc/numdoc.pdf](https://python-all.ru/3.0/library/array.html)
>
> ).
