array.md
1> **Источник:** https://python-all.ru/3.5/library/array.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 8.7. [`array`](https://python-all.ru/3.5/library/array.html#module-array) – Эффективные массивы числовых значений89---1011Этот модуль определяет тип объекта, который может компактно представлять массив базовых значений: символы, целые числа, числа с плавающей запятой. Массивы являются последовательностями и ведут себя очень похоже на списки, за исключением того, что тип хранимых в них объектов ограничен. Тип задаётся при создании объекта с помощью *кода типа*, который представляет собой один символ. Определены следующие коды типа:1213| Код типа | Тип C | Тип Python | Минимальный размер в байтах | Примечания |14| --- | --- | --- | --- | --- |15| `'b'` | signed char | int | 1 | |16| `'B'` | unsigned char | int | 1 | |17| `'u'` | Py\_UNICODE | символ Unicode | 2 | (1) |18| `'h'` | signed short | int | 2 | |19| `'H'` | unsigned short | int | 2 | |20| `'i'` | signed int | int | 2 | |21| `'I'` | unsigned int | int | 2 | |22| `'l'` | signed long | int | 4 | |23| `'L'` | unsigned long | int | 4 | |24| `'q'` | signed long long | int | 8 | (2) |25| `'Q'` | unsigned long long | int | 8 | (2) |26| `'f'` | float | float | 4 | |27| `'d'` | double | float | 8 | |2829Примечания:30311. Код типа `'u'` соответствует устаревшему символу Unicode в Python ([`Py_UNICODE`](https://python-all.ru/3.5/c-api/unicode.html#c.Py_UNICODE), который является `wchar_t`). В зависимости от платформы он может быть 16-битным или 32-битным.3233 `'u'` будет удалён вместе с остальной частью API [`Py_UNICODE`](https://python-all.ru/3.5/c-api/unicode.html#c.Py_UNICODE) .3435 Устарело с версии 3.3, будет удалено в версии 4.0.362. Коды типов `'q'` и `'Q'` доступны только в том случае, если компилятор C платформы, используемый для сборки Python, поддерживает C `long long`, или, на Windows, `__int64`.3738 Новое в версии 3.3.3940Фактическое представление значений определяется архитектурой машины (строго говоря, реализацией C). Фактический размер можно получить через атрибут `itemsize`.4142Модуль определяет следующий тип:4344#### `class array.array(typecode[, initializer])`4546Новый массив, элементы которого ограничены *typecode*, и инициализируется из необязательного значения *initializer*, которое должно быть списком, [байтоподобным объектом](https://python-all.ru/3.5/glossary.html#term-bytes-like-object) или итерируемым по элементам соответствующего типа.4748Если указан список или строка, инициализатор передается методу [`fromlist()`](https://python-all.ru/3.5/library/array.html#array.array.fromlist), [`frombytes()`](https://python-all.ru/3.5/library/array.html#array.array.frombytes) или [`fromunicode()`](https://python-all.ru/3.5/library/array.html#array.array.fromunicode) нового массива (см. ниже) для добавления начальных элементов в массив. В противном случае итерируемый инициализатор передается методу [`extend()`](https://python-all.ru/3.5/library/array.html#array.array.extend).4950#### `array.typecodes`5152Строка со всеми доступными кодами типов.5354Объекты array поддерживают обычные операции последовательностей: индексацию, срезы, конкатенацию и умножение. При использовании присваивания среза присваиваемое значение должно быть объектом array с тем же кодом типа; во всех остальных случаях возбуждается [`TypeError`](https://python-all.ru/3.5/library/exceptions.html#TypeError). Объекты array также реализуют буферный интерфейс и могут использоваться везде, где поддерживаются [байтоподобные объекты](https://python-all.ru/3.5/glossary.html#term-bytes-like-object).5556Также поддерживаются следующие элементы данных и методы:5758#### `array.typecode`5960Символ кода типа, использованный для создания массива.6162#### `array.itemsize`6364Длина в байтах одного элемента массива во внутреннем представлении.6566#### `array.append(x)`6768Добавляет новый элемент со значением *x* в конец массива.6970#### `array.buffer_info()`7172Возвращает кортеж `(address, length)`, содержащий текущий адрес памяти и длину в элементах буфера, используемого для хранения содержимого массива. Размер буфера памяти в байтах можно вычислить как `array.buffer_info()[1] * array.itemsize`. Это иногда полезно при работе с низкоуровневыми (и по своей природе небезопасными) интерфейсами ввода-вывода, требующими адреса памяти, такими как некоторые операции `ioctl()`. Возвращаемые числа действительны, пока существует массив и к нему не применяются операции, изменяющие длину.7374> **Примечание**75>76> При использовании объектов массива из кода, написанного на C или C++ (единственный способ эффективно использовать эту информацию), более разумно использовать буферный интерфейс, поддерживаемый объектами массива. Этот метод сохраняется для обратной совместимости, и его следует избегать в новом коде. Буферный интерфейс описан в [Протоколе буфера](https://python-all.ru/3.5/c-api/buffer.html#bufferobjects).7778#### `array.byteswap()`7980“Byteswap” все элементы массива. Поддерживается только для значений размером 1, 2, 4 или 8 байт; для значений других типов вызывается исключение [`RuntimeError`](https://python-all.ru/3.5/library/exceptions.html#RuntimeError). Полезно при чтении данных из файла, созданного на машине с другим порядком байт.8182#### `array.count(x)`8384Возвращает количество вхождений *x* в массиве.8586#### `array.extend(iterable)`8788Добавляет элементы из *iterable* в конец массива. Если *iterable* – другой массив, он должен иметь *точно такой же* код типа; в противном случае будет возбуждено [`TypeError`](https://python-all.ru/3.5/library/exceptions.html#TypeError). Если *iterable* не является массивом, он должен быть итерируемым, а его элементы должны быть подходящего типа для добавления в массив.8990#### `array.frombytes(s)`9192Добавляет элементы из строки, интерпретируя строку как машинный массив значений (как если бы он был прочитан из файла с помощью метода [`fromfile()`](https://python-all.ru/3.5/library/array.html#array.array.fromfile)).9394Новое в версии 3.2: [`fromstring()`](https://python-all.ru/3.5/library/array.html#array.array.fromstring) переименован в [`frombytes()`](https://python-all.ru/3.5/library/array.html#array.array.frombytes) для ясности.9596#### `array.fromfile(f, n)`9798Читает *n* элементов (как машинные значения) из [файлового объекта](https://python-all.ru/3.5/glossary.html#term-file-object) *f* и добавляет их в конец массива. Если доступно менее *n* элементов, возбуждается [`EOFError`](https://python-all.ru/3.5/library/exceptions.html#EOFError), но доступные элементы всё равно вставляются в массив. *f* должен быть настоящим встроенным файловым объектом; что-либо ещё с методом `read()` не подойдёт.99100#### `array.fromlist(list)`101102Добавляет элементы из списка. Эквивалентно `for x in list: a.append(x)`, за исключением того, что в случае ошибки типа массив остаётся неизменным.103104#### `array.fromstring()`105106Устаревший псевдоним для [`frombytes()`](https://python-all.ru/3.5/library/array.html#array.array.frombytes).107108#### `array.fromunicode(s)`109110Расширяет этот массив данными из заданной строки Unicode. Массив должен быть типа `'u'`; в противном случае возникает [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). Используйте `array.frombytes(unicodestring.encode(enc))` для добавления данных Unicode в массив другого типа.111112#### `array.index(x)`113114Возвращает наименьшее *i*, такое, что *i* является индексом первого вхождения *x* в массиве.115116#### `array.insert(i, x)`117118Вставляет новый элемент со значением *x* в массив перед позицией *i*. Отрицательные значения интерпретируются как смещение от конца массива.119120#### `array.pop([i])`121122Удаляет элемент с индексом *i* из массива и возвращает его. Необязательный аргумент по умолчанию равен `-1`, так что по умолчанию удаляется и возвращается последний элемент.123124#### `array.remove(x)`125126Удаляет первое вхождение *x* из массива.127128#### `array.reverse()`129130Изменяет порядок элементов в массиве на обратный.131132#### `array.tobytes()`133134Преобразует массив в машинные значения и возвращает байтовое представление (ту же последовательность байтов, которая была бы записана в файл методом [`tofile()`](https://python-all.ru/3.5/library/array.html#array.array.tofile)).135136Новое в версии 3.2: [`tostring()`](https://python-all.ru/3.5/library/array.html#array.array.tostring) переименован в [`tobytes()`](https://python-all.ru/3.5/library/array.html#array.array.tobytes) для ясности.137138#### `array.tofile(f)`139140Записывает все элементы (как машинные значения) в [файловый объект](https://python-all.ru/3.5/glossary.html#term-file-object) *f*.141142#### `array.tolist()`143144Преобразует массив в обычный список с теми же элементами.145146#### `array.tostring()`147148Устаревший псевдоним для [`tobytes()`](https://python-all.ru/3.5/library/array.html#array.array.tobytes).149150#### `array.tounicode()`151152Преобразует массив в строку Unicode. Массив должен быть типа `'u'`; в противном случае возникает [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError). Используйте `array.tobytes().decode(enc)` для получения строки Unicode из массива другого типа.153154Когда объект массива выводится или преобразуется в строку, он представляется как `array(typecode, initializer)`. Параметр *initializer* опускается, если массив пуст, в противном случае это строка, если *typecode* равен `'u'`, иначе это список чисел. Строка гарантированно может быть преобразована обратно в массив с тем же типом и значением с помощью [`eval()`](https://python-all.ru/3.5/library/functions.html#eval), при условии, что класс [`array`](https://python-all.ru/3.5/library/array.html#array.array) был импортирован с помощью `from array import array`. Примеры:155156```python157array('l')158array('u', 'hello \u2641')159array('l', [1, 2, 3, 4, 5])160array('d', [1.0, 2.0, 3.14])161```162163> **См. также**164>165> **Модуль [`struct`](https://python-all.ru/3.5/library/struct.html#module-struct)**166>167> Упаковка и распаковка разнородных двоичных данных.168>169> **Модуль [`xdrlib`](https://python-all.ru/3.5/library/xdrlib.html#module-xdrlib)**170>171> Упаковка и распаковка данных внешнего представления (XDR), используемого в некоторых системах удалённого вызова процедур.172>173> **[Документация Numerical Python](https://python-all.ru/3.5/library/array.html)**174>175> Расширение Numeric Python (NumPy) определяет ещё один тип массива; дополнительную информацию о Numerical Python см. на176>177> [http://www.numpy.org/](https://python-all.ru/3.5/library/array.html)178>179> .180