힙에 객체 할당하기¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- 반환값: 새 참조.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- 반환값: 새 참조.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- 반환값: 빌린 참조. …의 일부 안정 ABI.
새로 할당된 객체 op 를 유형 및 초기 참조와 함께 초기화합니다. 초기화된 객체를 반환하며, 객체의 다른 필드는 초기화되지 않습니다. 이름에도 불구하고 이 함수는 객체의
__init__()메서드(tp_init슬롯)와 관계가 없습니다. 구체적으로, 이 함수는 객체의__init__()메서드를 호출하지 않습니다.일반적으로 이 함수는 저수준 루틴으로 간주됩니다. 가능한 경우
tp_alloc을 사용하십시오. 사용자 타입에 대해tp_alloc을 구현할 때는PyType_GenericAlloc()이나PyObject_New()를 사용하는 것이 좋습니다.참고
이 함수는 초기
PyObject구조에 해당하는 객체의 메모리만 초기화합니다. 나머지 부분은 0으로 초기화하지 않습니다.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- 반환값: 빌린 참조. …의 일부 안정 ABI.
이것은
PyObject_Init()가 수행하는 모든 작업을 수행하고, 가변 크기 객체의 길이 정보도 초기화합니다.참고
이 함수는 객체 메모리의 일부만 초기화하며, 나머지는 0으로 초기화하지 않습니다.
-
PyObject_New(TYPE, typeobj)¶
C 구조체 유형 TYPE 과 파이썬 타입 객체 typeobj (
PyTypeObject*)를 사용하여 새로운 파이썬 객체를 할당합니다.PyObject_Malloc()을 호출하여 메모리를 할당하고PyObject_Init()처럼 초기화합니다. 호출자는 해당 객체의 유일한 참조를 소유하게 됩니다(즉, 참조 횟수가 1이 됩니다).객체용 메모리를 할당하기 위해 이 함수를 직접 호출하는 것을 피하십시오. 대신 해당 타입의
tp_alloc슬롯을 호출하십시오.형의
tp_alloc슬롯을 채울 때, 단순히 이 매크로를 호출하는 사용자 정의 함수보다PyType_GenericAlloc()을 사용하는 것이 권장됩니다.이 매크로는
tp_alloc,tp_new(__new__()), 또는tp_init(__init__())를 호출하지 않습니다.이 매크로는
tp_flags에Py_TPFLAGS_HAVE_GC가 설정된 객체에는 사용할 수 없습니다. 대신PyObject_GC_New를 사용하십시오.이 매크로에 의해 할당된 메모리는
PyObject_Free()로 해제해야 합니다(보통 객체의tp_free슬롯을 통해 호출됩니다).참고
반환된 메모리가 초기화되기 전에 완전히 0으로 채워졌는지는 보장되지 않습니다.
참고
이 매크로는 주어진 타입의 완전히 초기화된 객체를 생성하지 않습니다. 단지 메모리를 할당하고
tp_init에 의한 추가 초기화를 위해 준비할 뿐입니다. 완전히 초기화된 객체를 생성하려면 대신 typeobj 를 호출하십시오. 예시:PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
-
PyObject_NewVar(TYPE, typeobj, size)¶
PyObject_New와 유사하지만 다음과 같은 차이가 있습니다:TYPE 구조체에 더해 typeobj 의
tp_itemsize필드에 의해 지정된 크기의 size (Py_ssize_t)만큼의 필드를 위한 충분한 메모리를 할당합니다.메모리는
PyObject_InitVar()와 같이 초기화됩니다.
이는 생성 시점에 크기를 결정할 수 있는 튜플과 같은 객체를 구현하는 데 유용합니다. 필드 배열을 동일한 할당 영역에 포함시키면 할당 횟수가 줄어들어 메모리 관리 효율성이 향상됩니다.
객체용 메모리를 할당하기 위해 이 함수를 직접 호출하는 것을 피하십시오. 대신 해당 타입의
tp_alloc슬롯을 호출하십시오.형의
tp_alloc슬롯을 채울 때, 단순히 이 매크로를 호출하는 사용자 정의 함수보다PyType_GenericAlloc()을 사용하는 것이 권장됩니다.이 매크로는
tp_flags에Py_TPFLAGS_HAVE_GC가 설정된 객체에는 사용할 수 없습니다. 대신PyObject_GC_NewVar를 사용하십시오.이 함수에 의해 할당된 메모리는
PyObject_Free()로 해제해야 합니다(보통 객체의tp_free슬롯을 통해 호출됩니다).참고
반환된 메모리가 초기화되기 전에 완전히 0으로 채워졌는지는 보장되지 않습니다.
참고
이 매크로는 주어진 타입의 완전히 초기화된 객체를 생성하지 않습니다. 단지 메모리를 할당하고
tp_init에 의한 추가 초기화를 위해 준비할 뿐입니다. 완전히 초기화된 객체를 생성하려면 대신 typeobj 를 호출하십시오. 예시:PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
더 보기
- 모듈 객체
확장 모듈을 할당하고 만듭니다.
소프트웨어 단계에서 폐지 예정인 에일리어스¶
버전 3.15부터 약하게 폐지 <Soft deprecated>.
이것들은 기존 함수와 매크로에 대한 에일리어스입니다. 오직 하위 호환성을 위해 존재합니다.
소프트웨어 단계에서 폐지 예정인 에일리어스 |
함수 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|