array.md
1> **Источник:** https://python-all.ru/3.15/library/array.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `array` – Эффективные массивы числовых значений89---1011Этот модуль определяет тип объекта, который может компактно представлять массив базовых значений: символов, целых чисел, чисел с плавающей запятой, комплексных чисел. Массивы являются изменяемыми [последовательности](https://python-all.ru/3.15/glossary.html#term-sequence) типами и ведут себя во многом как списки, за исключением того, что тип хранящихся в них объектов ограничен. Тип задаётся при создании объекта с помощью *кода типа*, который представляет собой один символ. Следующие коды типа определены:1213| Код типа | Тип C | Тип Python | Минимальный размер в байтах | Примечания |14| --- | --- | --- | --- | --- |15| `'b'` | signed char | int | 1 | |16| `'B'` | unsigned char | int | 1 | |17| `'u'` | wchar\_t | символ Unicode | 2 | (1) |18| `'w'` | Py\_UCS4 | символ Unicode | 4 | (2) |19| `'h'` | signed short | int | 2 | |20| `'H'` | unsigned short | int | 2 | |21| `'i'` | signed int | int | 2 | |22| `'I'` | unsigned int | int | 2 | |23| `'l'` | signed long | int | 4 | |24| `'L'` | unsigned long | int | 4 | |25| `'q'` | signed long long | int | 8 | |26| `'Q'` | unsigned long long | int | 8 | |27| `'e'` | \_Float16 | float | 2 | (3) |28| `'f'` | float | float | 4 | |29| `'d'` | double | float | 8 | |30| `'Zf'` | float complex | комплексное число | 8 | (4) |31| `'Zd'` | double complex | комплексное число | 16 | (4) |3233Примечания:34351. Может быть 16 или 32 бит в зависимости от платформы.3637 Изменено в версии 3.9: `array('u')` теперь использует `wchar_t` в качестве типа C вместо устаревшего `Py_UNICODE`. Это изменение не влияет на поведение, поскольку `Py_UNICODE` является псевдонимом `wchar_t`, начиная с Python 3.3.3839 Устарело с версии 3.3, будет удалено в версии 3.16: Пожалуйста, переходите на код типа `'w'`.402. Добавлено в версии 3.13.413. Тип IEEE 754 binary16 «половинной точности» был введён в редакции 2008 года стандарта [IEEE 754](https://python-all.ru/3.15/library/array.html). Этот тип не получил широкой поддержки в компиляторах C. Он доступен как тип \_Float16, если компилятор поддерживает Приложение H стандарта C23.4243 Добавлено в версии 3.15.444. Комплексные типы (`Zf` и `Zd`) доступны безусловно, независимо от поддержки комплексных типов (Приложение G стандарта C11) компилятором C. Как указано в стандарте C11, каждый комплексный тип представлен массивом C из двух элементов, содержащим вещественную и мнимую части соответственно.4546 Добавлено в версии 3.15.4748> **См. также**49>50> Модули [ctypes](https://python-all.ru/3.15/library/ctypes.html#ctypes-fundamental-data-types) и [struct](https://python-all.ru/3.15/library/struct.html#format-characters), а также сторонние модули, такие как [numpy](https://python-all.ru/3.15/library/array.html), используют похожие, но немного отличающиеся коды типов.5152Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут [`array.itemsize`](https://python-all.ru/3.15/library/array.html#array.array.itemsize).5354Модуль определяет следующий элемент:5556#### `array.typecodes`5758Кортеж со всеми доступными кодами типов.5960Изменено в версии 3.15: Тип изменился с [`str`](https://python-all.ru/3.15/library/stdtypes.html#str) на [`tuple`](https://python-all.ru/3.15/library/stdtypes.html#tuple).6162Модуль определяет следующий тип:6364#### `class array.array(typecode[, initializer])`6566Новый массив, элементы которого ограничены *typecode* и инициализируется из необязательного значения *инициализатора*, которое должно быть объектом [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.15/library/stdtypes.html#bytearray), строкой Unicode или итерируемым объектом, возвращающим элементы соответствующего типа.6768Если передан объект [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes) или [`bytearray`](https://python-all.ru/3.15/library/stdtypes.html#bytearray), инициализатор передаётся методу [`frombytes()`](https://python-all.ru/3.15/library/array.html#array.array.frombytes) нового массива; если передана строка Unicode, инициализатор передаётся методу [`fromunicode()`](https://python-all.ru/3.15/library/array.html#array.array.fromunicode); в противном случае итератор инициализатора передаётся методу [`extend()`](https://python-all.ru/3.15/library/array.html#array.array.extend) для добавления начальных элементов в массив.6970Объекты массива поддерживают обычные операции [изменяемой](https://python-all.ru/3.15/library/stdtypes.html#typesseq-mutable) [последовательности](https://python-all.ru/3.15/glossary.html#term-sequence): индексирование, срезы, конкатенацию и умножение. При использовании присваивания срезу присваиваемое значение должно быть объектом массива с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/3.15/library/exceptions.html#TypeError). Объекты массива также реализуют буферный интерфейс и могут использоваться везде, где поддерживаются [объекты, подобные байтам](https://python-all.ru/3.15/glossary.html#term-bytes-like-object).7172Массивы являются [обобщёнными](https://python-all.ru/3.15/library/typing.html#generics) по типу своего содержимого.7374Возбуждает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `array.__new__` с аргументами `typecode`, `initializer`.7576#### `typecode`7778Символ кода типа, использованный для создания массива.7980#### `itemsize`8182Длина в байтах одного элемента массива во внутреннем представлении.8384#### `append(value, /)`8586Добавляет новый элемент с указанным значением в конец массива.8788#### `buffer_info()`8990Возвращает кортеж `(address, length)`, содержащий текущий адрес памяти и длину в элементах буфера, используемого для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей природе небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, такими как некоторые операции `ioctl()`. Возвращаемые числа действительны, пока существует массив и к нему не применяются операции, изменяющие длину.9192> **Примечание**93>94> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости, и его следует избегать в новом коде. Буферный интерфейс описан в [Протоколе буфера](https://python-all.ru/3.15/c-api/buffer.html#bufferobjects).9596#### `byteswap()`9798«Перестановка байтов» всех элементов массива. Поддерживается только для значений размером 1, 2, 4, 8 или 16 байт; для значений других типов возбуждается [`RuntimeError`](https://python-all.ru/3.15/library/exceptions.html#RuntimeError). Это полезно при чтении данных из файла, записанного на машине с другим порядком байтов. Обратите внимание, что для комплексных типов порядок компонентов (сначала действительная часть, затем мнимая) сохраняется.99100#### `count(value, /)`101102Возвращает количество вхождений *value* в массиве.103104#### `extend(iterable, /)`105106Добавляет элементы из *iterable* в конец массива. Если *iterable* – другой массив, он должен иметь *точно такой же* код типа; в противном случае будет возбуждено [`TypeError`](https://python-all.ru/3.15/library/exceptions.html#TypeError). Если *iterable* не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.107108#### `frombytes(buffer, /)`109110Добавляет элементы из [байтоподобного объекта](https://python-all.ru/3.15/glossary.html#term-bytes-like-object), интерпретируя его содержимое как машинные значения (как если бы они были прочитаны из файла с помощью метода [`fromfile()`](https://python-all.ru/3.15/library/array.html#array.array.fromfile)).111112Добавлено в версии 3.2: `fromstring()` переименован в `frombytes()` для ясности.113114#### `fromfile(f, n, /)`115116Читает *n* элементов (как машинные значения) из [файлового объекта](https://python-all.ru/3.15/glossary.html#term-file-object) *f* и добавляет их в конец массива. Если доступно менее *n* элементов, возбуждается [`EOFError`](https://python-all.ru/3.15/library/exceptions.html#EOFError), но уже прочитанные элементы всё равно вставляются в массив.117118#### `fromlist(list, /)`119120Добавляет элементы из списка. Эквивалентно `for x in list: a.append(x)`, за исключением того, что в случае ошибки типа массив остаётся неизменным.121122#### `fromunicode(ustr, /)`123124Расширяет данный массив данными из указанной строки Unicode. Массив должен иметь код типа `'u'` или `'w'`; в противном случае вызывается исключение [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError). Используйте `array.frombytes(unicodestring.encode(enc))` для добавления данных Unicode в массив другого типа.125126#### `index(value[, start[, stop]])`127128Возвращает наименьшее *i*, такое что *i* – это индекс первого вхождения *value* в массиве. Необязательные аргументы *start* и *stop* можно задать для поиска *value* в поддиапазоне массива. Возбуждает [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError), если *value* не найдено.129130Изменено в версии 3.10: Добавлены необязательные параметры *start* и *stop*.131132#### `insert(index, value, /)`133134Вставляет новый элемент *value* в массив перед позицией *index*. Отрицательные значения трактуются как смещение от конца массива.135136#### `pop(index=-1, /)`137138Удаляет элемент с индексом *i* из массива и возвращает его. Необязательный аргумент по умолчанию равен `-1`, так что по умолчанию удаляется и возвращается последний элемент.139140#### `remove(value, /)`141142Удаляет первое вхождение *value* из массива.143144#### `clear()`145146Удаляет все элементы из массива.147148Добавлено в версии 3.13.149150#### `reverse()`151152Изменяет порядок элементов в массиве на обратный.153154#### `tobytes()`155156Преобразует массив в машинные значения и возвращает байтовое представление (ту же последовательность байтов, которая была бы записана в файл методом [`tofile()`](https://python-all.ru/3.15/library/array.html#array.array.tofile)).157158Добавлено в версии 3.2: `tostring()` переименован в `tobytes()` для ясности.159160#### `tofile(f, /)`161162Записывает все элементы (как машинные значения) в [файловый объект](https://python-all.ru/3.15/glossary.html#term-file-object) *f*.163164#### `tolist()`165166Преобразует массив в обычный список с теми же элементами.167168#### `tounicode()`169170Преобразует массив в строку Unicode. Массив должен иметь код типа `'u'` или `'w'`; в противном случае вызывается исключение [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError). Используйте `array.tobytes().decode(enc)` для получения строки Unicode из массива другого типа.171172Строковое представление объектов массива имеет форму `array(typecode, initializer)`. *initializer* опускается, если массив пуст; в противном случае это строка Unicode, если *typecode* равен `'u'` или `'w'`, иначе это список чисел. Гарантируется, что это строковое представление можно преобразовать обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/3.15/library/functions.html#eval), при условии, что класс [`array`](https://python-all.ru/3.15/library/array.html#array.array) был импортирован с помощью `from array import array`. Переменные `inf` и `nan` также должны быть определены, если массив содержит соответствующие числа с плавающей запятой. Примеры:173174```python175array('l')176array('w', 'hello \u2641')177array('l', [1, 2, 3, 4, 5])178array('d', [1.0, 2.0, 3.14, -inf, nan])179```180181> **См. также**182>183> **Модуль [`struct`](https://python-all.ru/3.15/library/struct.html#module-struct)**184>185> Упаковка и распаковка разнородных двоичных данных.186>187> **[NumPy](https://python-all.ru/3.15/library/array.html)**188>189> Пакет NumPy определяет другой тип массива.190