튜플 객체
*********

PyTupleObject

   이 "PyObject"의 서브 형은 파이썬 튜플 객체를 나타냅니다.

PyTypeObject PyTuple_Type

   이 "PyTypeObject" 인스턴스는 파이썬 튜플 형을 나타냅니다. 파이썬 계
   층의 "tuple"과 같은 객체입니다.

int PyTuple_Check(PyObject *p)

   *p*가 튜플 객체이거나 튜플 형의 서브 형의 인스턴스면 참을 돌려줍니
   다. 이 함수는 항상 성공합니다.

int PyTuple_CheckExact(PyObject *p)

   *p*가 튜플 객체이지만, 튜플 형의 서브 형의 인스턴스는 아니면 참을
   돌려줍니다. 이 함수는 항상 성공합니다.

PyObject* PyTuple_New(Py_ssize_t len)
    *Return value: New reference.*

   크기 *len* 인 튜플 객체나, 실패 시 "NULL"을 반환합니다.

PyObject* PyTuple_Pack(Py_ssize_t n, ...)
    *Return value: New reference.*

   크기 *n* 인 새 튜플 객체나, 실패 시 "NULL"을 반환합니다. 튜플 값은
   파이썬 객체를 가리키는 후속 *n* 개의 C 인자로 초기화됩니다.
   "PyTuple_Pack(2, a, b)"는 "Py_BuildValue("(OO)", a, b)"와 동등합니
   다.

Py_ssize_t PyTuple_Size(PyObject *p)

   튜플 객체에 대한 포인터를 받아서, 해당 튜플의 크기를 반환합니다.

Py_ssize_t PyTuple_GET_SIZE(PyObject *p)

   튜플 *p*의 크기를 반환합니다. 이 크기는 "NULL"이 아니고 튜플을 가리
   켜야 합니다; 에러 검사는 수행되지 않습니다.

PyObject* PyTuple_GetItem(PyObject *p, Py_ssize_t pos)
    *Return value: Borrowed reference.*

   *p*가 가리키는 튜플의 *pos* 위치에 있는 객체를 반환합니다. *pos*가
   범위를 벗어나면, "NULL"을 반환하고 "IndexError" 예외를 설정합니다.

PyObject* PyTuple_GET_ITEM(PyObject *p, Py_ssize_t pos)
    *Return value: Borrowed reference.*

   "PyTuple_GetItem()"와 비슷하지만, 인자를 확인하지 않습니다.

PyObject* PyTuple_GetSlice(PyObject *p, Py_ssize_t low, Py_ssize_t high)
    *Return value: New reference.*

   *p*가 가리키는 튜플의 *low*와 *high* 사이의 슬라이스를 반환하거나,
   실패하면 "NULL"을 반환합니다. 이것은 파이썬 표현식 "p[low:high]"와
   동등합니다. 리스트 끝으로부터의 인덱싱은 지원되지 않습니다.

int PyTuple_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)

   *p*가 가리키는 튜플의 *pos* 위치에 객체 *o*에 대한 참조를 삽입합니
   다. 성공하면 "0"을 반환합니다. *pos*가 범위를 벗어나면, "-1"을 반환
   하고 "IndexError" 예외를 설정합니다.

   참고:

     이 함수는 *o*에 대한 참조를 "훔치고" 영향을 받는 위치에서 튜플에
     이미 있는 항목에 대한 참조를 버립니다(discard).

void PyTuple_SET_ITEM(PyObject *p, Py_ssize_t pos, PyObject *o)

   "PyTuple_SetItem()"과 비슷하지만, 에러 검사는 하지 않으며 새로운 튜
   플을 채울 때*만* 사용해야 합니다.

   참고:

     이 매크로는 *o*에 대한 참조를 "훔치고", "PyTuple_SetItem()"와 달
     리, 교체 중인 항목에 대한 참조를 버리지 *않습니다*; *pos* 위치에
     서 튜플의 모든 참조는 누수됩니다.

int _PyTuple_Resize(PyObject **p, Py_ssize_t newsize)

   튜플 크기를 조정하는 데 사용할 수 있습니다. *newsize*는 튜플의 새로
   운 길이가 됩니다. 튜플은 불변이라고 *여겨지므로*, 객체에 대해 참조
   가 하나만 있을 때만 사용해야 합니다. 튜플이 코드의 다른 부분에 이미
   알려졌으면 이것을 사용하지 *마십시오*. 튜플은 항상 끝에서 커지거나
   줄어듭니다. 이것을 오래된 튜플을 파괴하고 새 튜플을 만드는 것으로
   생각하십시오, 단지 더 효율적일 뿐입니다. 성공하면 "0"을 반환합니다.
   클라이언트 코드는, "*p"의 결괏값이 이 함수를 호출하기 전과 같다고
   가정해서는 안 됩니다. "*p"가 참조하는 객체가 바뀌면 원래 "*p"는 파
   괴됩니다. 실패하면, "-1"을 반환하고, "*p"를 "NULL"로 설정하고,
   "MemoryError" 나 "SystemError"를 발생시킵니다.


구조체 시퀀스 객체
******************

구조체 시퀀스(struct sequence) 객체는 "namedtuple()" 객체의 C 등가물입
니다, 즉 어트리뷰트를 통해 항목에 액세스할 수 있는 시퀀스입니다. 구조
체 시퀀스를 만들려면, 먼저 특정 구조체 시퀀스 형을 만들어야 합니다.

PyTypeObject* PyStructSequence_NewType(PyStructSequence_Desc *desc)
    *Return value: New reference.*

   아래에 설명된 *desc*의 데이터로 새로운 구조체 시퀀스 형을 만듭니다.
   결과 형의 인스턴스는 "PyStructSequence_New()"로 만들 수 있습니다.

void PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)

   *desc*로 구조체 시퀀스 형 *type*을 재자리에서 초기화합니다.

int PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc)

   "PyStructSequence_InitType"와 같지만, 성공하면 "0"을, 실패하면 "-1"
   을 반환합니다.

   버전 3.4에 추가.

PyStructSequence_Desc

   만들 구조체 시퀀스 형의 메타 정보를 포함합니다.

   +---------------------+--------------------------------+----------------------------------------+
   | 필드                | C 형                           | 의미                                   |
   |=====================|================================|========================================|
   | "name"              | "const char *"                 | 구조체 시퀀스 형의 이름                |
   +---------------------+--------------------------------+----------------------------------------+
   | "doc"               | "const char *"                 | 해당 형에 대한 독스트링에 대한 포인터  |
   |                     |                                | 나 생략하려면 "NULL"                   |
   +---------------------+--------------------------------+----------------------------------------+
   | "fields"            | "PyStructSequence_Field *"     | 새로운 형의 필드 이름을 가진 "NULL"로  |
   |                     |                                | 끝나는 배열에 대한 포인터              |
   +---------------------+--------------------------------+----------------------------------------+
   | "n_in_sequence"     | "int"                          | 파이썬 측에서 볼 수 있는 필드 수 (튜플 |
   |                     |                                | 로 사용된 경우)                        |
   +---------------------+--------------------------------+----------------------------------------+

PyStructSequence_Field

   구조체 시퀀스의 필드를 기술합니다. 구조체 시퀀스는 튜플로 모형화되
   므로, 모든 필드는 "PyObject*" 형을 취합니다.
   "PyStructSequence_Desc"의 "fields" 배열의 인덱스는 구조체 시퀀스의
   어떤 필드가 기술되는지를 결정합니다.

   +-------------+--------------------+-------------------------------------------+
   | 필드        | C 형               | 의미                                      |
   |=============|====================|===========================================|
   | "name"      | "const char *"     | 필드의 이름이나 이름있는 필드의 목록을 끝 |
   |             |                    | 내려면 "NULL", 이름이 없는 상태로 두려면  |
   |             |                    | "PyStructSequence_UnnamedField"로 설정합  |
   |             |                    | 니다                                      |
   +-------------+--------------------+-------------------------------------------+
   | "doc"       | "const char *"     | 필드 독스트링이나 생략하려면 "NULL"       |
   +-------------+--------------------+-------------------------------------------+

const char * const PyStructSequence_UnnamedField

   이름 없는 상태로 남겨두기 위한 필드 이름의 특수 값.

   버전 3.9에서 변경: 형이 "char *"에서 변경되었습니다.

PyObject* PyStructSequence_New(PyTypeObject *type)
    *Return value: New reference.*

   "PyStructSequence_NewType()"으로 만든 *type*의 인스턴스를 만듭니다.

PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
    *Return value: Borrowed reference.*

   *p*가 가리키는 구조체 시퀀스의 위치 *pos*에 있는 객체를 돌려줍니다.
   범위 검사가 수행되지 않습니다.

PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
    *Return value: Borrowed reference.*

   "PyStructSequence_GetItem()"과 동등한 매크로.

void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)

   구조체 시퀀스 *p*의 인덱스 *pos*에 있는 필드를 값 *o*로 설정합니다.
   "PyTuple_SET_ITEM()"과 마찬가지로, 이것은 새로운 인스턴스를 채울 때
   만 사용해야 합니다.

   참고:

     이 함수는 *o*에 대한 참조를 "훔칩니다".

void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)

   "PyStructSequence_SetItem()"과 동등한 매크로.

   참고:

     이 함수는 *o*에 대한 참조를 "훔칩니다".
