"array" --- 효율적인 숫자 배열
******************************

======================================================================

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

+-------------+----------------------+---------------------+-------------------------+---------+
| 형 코드     | C 형                 | 파이썬 형           | 최소 크기(바이트)       | 노트    |
|=============|======================|=====================|=========================|=========|
| "'b'"       | signed char          | int                 | 1                       |         |
+-------------+----------------------+---------------------+-------------------------+---------+
| "'B'"       | unsigned char        | int                 | 1                       |         |
+-------------+----------------------+---------------------+-------------------------+---------+
| "'u'"       | Py_UNICODE           | 유니코드 문자       | 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. "'u'" 형 코드는 파이썬의 구식 유니코드 문자("Py_UNICODE", 이것은
   "wchar_t"입니다)에 해당합니다. 플랫폼에 따라, 16비트나 32비트가 될
   수 있습니다.

   "'u'"는 나머지 "Py_UNICODE" API와 함께 제거될 것입니다.

   Deprecated since version 3.3, will be removed in version 4.0.

값의 실제 표현은 기계 아키텍처에 의해(엄격히 말하자면 C 구현에 의해)
결정됩니다. 실제 크기는 "itemsize" 어트리뷰트를 통해 액세스할 수 있습
니다.

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

class array.array(typecode[, initializer])

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

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

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

array.typecodes

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

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

다음 데이터 항목과 메서드도 지원됩니다:

array.typecode

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

array.itemsize

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

array.append(x)

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

array.buffer_info()

   배열의 내용을 담는 데 사용된 버퍼의 현재 메모리 주소와 요소의 수로
   표현한 길이를 제공하는 튜플 "(address, length)"를 반환합니다. 바이
   트 단위의 메모리 버퍼 크기는 "array.buffer_info()[1] *
   array.itemsize"로 계산할 수 있습니다. 이것은 특정 "ioctl()" 연산과
   같은 메모리 주소가 필요한 저수준(그리고 근본적으로 안전하지 않은)
   I/O 인터페이스로 작업할 때 간혹 유용합니다. 반환된 숫자는 배열이 존
   재하고 길이 변경 연산이 적용되지 않는 한 유효합니다.

   참고:

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

array.byteswap()

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

array.count(x)

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

array.extend(iterable)

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

array.frombytes(s)

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

   버전 3.2에 추가: "fromstring()"은 명확하게 하려고 "frombytes()"로
   이름을 바꿨습니다.

array.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.

array.fromlist(list)

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

array.fromstring()

   "frombytes()"의 폐지된 별칭.

   Deprecated since version 3.2, will be removed in version 3.9.

array.fromunicode(s)

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

array.index(x)

   *i*가 배열에서 *x*가 처음 나타나는 인덱스가 되도록 가장 작은 *i*를
   반환합니다.

array.insert(i, x)

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

array.pop([i])

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

array.remove(x)

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

array.reverse()

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

array.tobytes()

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

   버전 3.2에 추가: "tostring()"은 명확하게 하려고 "tobytes()"로 이름
   을 바꿨습니다.

array.tofile(f)

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

array.tolist()

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

array.tostring()

   "tobytes()"의 폐지된 별칭.

   Deprecated since version 3.2, will be removed in version 3.9.

array.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) 데이터의 패킹과 언 패킹.

  The Numerical Python Documentation
     Numeric Python 확장(NumPy)은 다른 배열형을 정의합니다; Numerical
     Python에 대한 더 자세한 정보는 http://www.numpy.org/ 를 참조하십
     시오.
