# `array` — 효율적인 숫자 배열

이 모듈은 문자, 정수, 부동 소수점 숫자와 같은 기본적인 값의 배열을 간결하게 표현할 수 있는 객체 형을 정의합니다. 배열은 시퀀스 형이며 리스트와 매우 비슷하게 행동합니다만, 그곳에 저장되는 객체의 형이 제약된다는 점이 다릅니다. 형은 객체 생성 시에 단일 문자인 형 코드(type code)를 사용하여 지정됩니다. 다음 형 코드가 정의됩니다:

형 코드 | C 형 | 파이썬 형 | 최소 크기(바이트) | 노트
--- | --- | --- | --- | ---
`'b'` | signed char | int | 1 |
`'B'` | unsigned char | int | 1 |
`'u'` | wchar_t | 유니코드 문자 | 2 | (1)
`'h'` | signed short | int | 2 |
`'H'` | unsigned short | int | 2 |
`'i'` | signed int | int | 2 |
`'I'` | unsigned int | int | 2 |
`'l'` | signed long | int | 4 |
`'L'` | unsigned long | int | 4 |
`'q'` | signed long long | int | 8 |
`'Q'` | unsigned long long | int | 8 |
`'f'` | float | float | 4 |
`'d'` | double | float | 8 |

노트:

1. 플랫폼에 따라 16비트 또는 32비트 일 수 있습니다.

   버전 3.9에서 변경: `array('u')` now uses `wchar_t` as C type instead of deprecated `Py_UNICODE`. This change doesn’t affect its behavior because `Py_UNICODE` is alias of `wchar_t` since Python 3.3.

   버전 3.3에서 폐지되었습니다, 버전 4.0에서 제거됩니다..

The actual representation of values is determined by the machine architecture (strictly speaking, by the C implementation). The actual size can be accessed through the `array.itemsize` attribute.

The module defines the following item:

`array.``typecodes`

  사용 가능한 모든 형 코드가 있는 문자열.

모듈은 다음 형을 정의합니다:

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

  항목이 typecode에 의해 제한되는 새 배열, 선택적인 initializer 값으로 초기화되는데, 리스트, 바이트열류 객체 또는 적절한 형의 요소에 대한 이터러블이어야 합니다.

  리스트나 문자열이 주어지면, initializer는 새 배열의 `fromlist()`, `frombytes()` 또는 `fromunicode()` 메서드(아래를 참조하세요)에 전달되어 배열에 초기 항목을 추가합니다. 그렇지 않으면 이터러블 initializer가 `extend()` 메서드에 전달됩니다.

  배열 객체는 인덱싱, 슬라이싱, 이어붙이기 및 곱셈과 같은 일반적인 시퀀스 연산을 지원합니다. 슬라이스 대입을 사용할 때, 대입되는 값은 같은 형 코드의 배열 객체여야 합니다; 다른 모든 경우에는, `TypeError`가 발생합니다. 배열 객체는 버퍼 인터페이스도 구현하며, 바이트열류 객체가 지원되는 곳이면 어디에서나 사용될 수 있습니다.

  `typecode`, `initializer` 인자로 감사 이벤트(auditing event) `array.__new__`를 발생시킵니다.

  `typecode`

    배열을 만드는 데 사용된 typecode 문자.

  `itemsize`

    내부 표현에서 하나의 배열 항목의 길이 (바이트).

  `append`(x)

    배열의 끝에 값 x로 새 항목을 추가합니다.

  `buffer_info`()

    Return a tuple `(address, length)` giving the current memory address and the length in elements of the buffer used to hold array’s contents. The size of the memory buffer in bytes can be computed as `array.buffer_info()[1] * array.itemsize`. This is occasionally useful when working with low-level (and inherently unsafe) I/O interfaces that require memory addresses, such as certain `ioctl()` operations. The returned numbers are valid as long as the array exists and no length-changing operations are applied to it.

    참고

    C나 C++로 작성된 코드(이 정보를 효율적으로 사용하는 유일한 방법)에서 배열 객체를 사용할 때, 배열 객체가 지원하는 버퍼 인터페이스를 사용하는 것이 좋습니다. 이 메서드는 이전 버전과의 호환성을 위해 유지되며 새 코드에서는 사용하지 않아야 합니다. 버퍼 인터페이스는 버퍼 프로토콜에 설명되어 있습니다.

  `byteswap`()

    배열의 모든 항목을 “바이트 스와프(byteswap)” 합니다. 1, 2, 4 또는 8바이트 크기의 값에 대해서만 지원됩니다; 다른 형의 값이면 `RuntimeError`가 발생합니다. 바이트 순서가 다른 컴퓨터에서 작성된 파일에서 데이터를 읽을 때 유용합니다.

  `count`(x)

    배열 내에서 x가 등장하는 횟수를 반환합니다.

  `extend`(iterable)

    iterable의 항목을 배열의 끝에 추가합니다. iterable이 다른 배열이면, 정확히 같은 형 코드를 가져야 합니다; 그렇지 않으면, `TypeError`가 발생합니다. iterable이 배열이 아니면, 이터러블이어야 하며 요소는 배열에 추가할 올바른 형이어야 합니다.

  `frombytes`(s)

    문자열에서 항목을 추가합니다. 문자열을 기곗값(machine value)의 배열로 해석합니다 (마치 `fromfile()` 메서드를 사용하여 파일에서 읽은 것처럼).

    버전 3.2에 추가: `fromstring()` is renamed to `frombytes()` for clarity.

  `fromfile`(f, n)

    Read n items (as machine values) from the file object f and append them to the end of the array. If less than n items are available, `EOFError` is raised, but the items that were available are still inserted into the array.

  `fromlist`(list)

    리스트에서 항목을 추가합니다. 이것은 형 에러가 있으면 배열이 변경되지 않는다는 점만 제외하면 `for x in list: a.append(x)`와 동등합니다.

  `fromunicode`(s)

    주어진 유니코드 문자열의 데이터로 이 배열을 확장합니다. 배열은 `'u'` 형의 배열이어야 합니다; 그렇지 않으면 `ValueError`가 발생합니다. 다른 형의 배열에 유니코드 데이터를 추가하려면 `array.frombytes(unicodestring.encode(enc))`를 사용하십시오.

  `index`(x[, start[, stop]])

    Return the smallest i such that i is the index of the first occurrence of x in the array. The optional arguments start and stop can be specified to search for x within a subsection of the array. Raise `ValueError` if x is not found.

    버전 3.10에서 변경: Added optional start and stop parameters.

  `insert`(i, x)

    i 위치 앞에 값이 x인 새 항목을 배열에 삽입합니다. 음수 값은 배열 끝에 상대적인 값으로 처리됩니다.

  `pop`([i])

    배열에서 인덱스 i에 있는 항목을 제거하고 이를 반환합니다. 선택적 인자의 기본값은 `-1`이므로, 기본적으로 마지막 항목이 제거되고 반환됩니다.

  `remove`(x)

    배열에서 첫 번째 x를 제거합니다.

  `reverse`()

    배열의 항목 순서를 뒤집습니다.

  `tobytes`()

    배열을 기곗값 배열로 변환하고 바이트열 표현(`tofile()` 메서드로 파일에 기록될 바이트 시퀀스와 같습니다)을 반환합니다.

    버전 3.2에 추가: `tostring()` is renamed to `tobytes()` for clarity.

  `tofile`(f)

    모든 항목을 (기곗값으로) 파일 객체 f에 씁니다.

  `tolist`()

    배열을 같은 항목이 있는 일반 리스트로 변환합니다.

  `tounicode`()

    배열을 유니코드 문자열로 변환합니다. 배열은 `'u'` 형의 배열이어야 합니다; 그렇지 않으면 `ValueError`가 발생합니다. 다른 형의 배열로부터 유니코드 문자열을 얻으려면 `array.tobytes().decode(enc)`를 사용하십시오.

배열 객체가 인쇄되거나 문자열로 변환될 때, `array(typecode, initializer)`로 표현됩니다. 배열이 비어 있으면 initializer가 생략되고, 그렇지 않으면 typecode가 `'u'` 인 경우 문자열이 되고, 그렇지 않으면 숫자 리스트가 됩니다. 문자열은 `eval()`을 사용하여 같은 형과 값을 갖는 배열로 다시 변환될 수 있음이 보장됩니다. 단 `from array import array`를 사용하여 `array` 클래스를 임포트 한다고 가정합니다. 예:

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

더 보기

모듈 `struct`

  이질적인(heterogeneous) 바이너리 데이터의 패킹과 언 패킹.

모듈 `xdrlib`

  일부 원격 프로시저 호출 시스템에서 사용되는 XDR(External Data Representation) 데이터의 패킹과 언 패킹.

NumPy

  The NumPy package defines another array type.