힙에 객체 할당하기¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- 반환값: 새 참조.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- 반환값: 새 참조.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- 반환값: 빌린 참조. 상의 안정 ABI.
Initialize a newly allocated object op with its type and initial reference. Returns the initialized object. Other fields of the object are not initialized. Despite its name, this function is unrelated to the object’s
__init__()method (tp_initslot). Specifically, this function does not call the object’s__init__()method.일반적으로 이 함수는 저수준 루틴으로 간주하십시오. 가능한 경우
tp_alloc를 사용하세요. 유형에 대해tp_alloc을 구현하려면PyType_GenericAlloc()또는PyObject_New()를 선호하십시오.참고
이 함수는 초기
PyObject구조체에 해당하는 객체의 메모리만 초기화할 뿐, 나머지는 초기화하지 않습니다.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- 반환값: 빌린 참조. 상의 안정 ABI.
이것은
PyObject_Init()가 수행하는 모든 작업을 수행하고, 가변 크기 객체의 길이 정보도 초기화합니다.참고
이 함수는 객체의 메모리 일부만 초기화합니다. 나머지 영역은 초기화하지 않습니다.
-
PyObject_New(TYPE, typeobj)¶
C 구조체 형 TYPE\과 파이썬 타입 형 typeobj (
PyTypeObject*) 를 콜 :c:func:`PyObject_Malloc`로 메모리를 할당하고, 이를 :c:func:`PyObject_Init`처럼 초기화하여 새로운 파이썬 객체를 할당합니다. 호출자는 객체에 대한 유일한 참조를 소유하게 됩니다 (즉, 참조 카운트는 1이 됩니다).메모리를 할당하려고 이 함수를 직접 호출하는 것은 피하십시오. 대신 유형의
tp_alloc슬롯을 호출하십시오.유형의
tp_alloc슬롯을 채울 때, :c:func:`PyType_GenericAlloc`을 사용하여 이 매크로를 단순히 호출하는 사용자 정의 함수보다 선호합니다.이 매크로는
tp_alloc,tp_new(__new__()), 또는tp_init(__init__())를 호출하지 않습니다.이것은 :c:member:`~PyTypeObject.tp_flags`에서 :c:macro:`Py_TPFLAGS_HAVE_GC`가 설정된 객체에는 사용할 수 없습니다. 대신 :c:macro:`PyObject_GC_New`를 사용하십시오.
이 매크로로 할당된 메모리는
PyObject_Free()(일반적으로 객체의tp_free슬롯을 통해 호출됨)로 해제되어야 합니다.참고
반환된 메모리가 초기화되기 전에 완전히 0으로 설정되어 있을 것이라고 보장할 수 없습니다.
참고
이 매크로는 주어진 유형의 완전히 초기화된 객체를 구성하지 않습니다. 단지 메모리를 할당하고
tp_init에 의한 추가 초기화를 위해 준비할 뿐입니다. 완전히 초기화된 객체를 구성하려면 typeobj 를 호출하십시오. 예:PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
-
PyObject_NewVar(TYPE, typeobj, size)¶
:c:macro:`PyObject_New`와 유사하지만 다음과 같은 차이점이 있습니다:
typeobj*의 :c:member:`~PyTypeObject.tp_itemsize` 필드가 지정하는 크기의 *TYPE 구조체와 size (
Py_ssize_t) 필드에 충분한 메모리를 할당합니다.메모리는 :c:func:`PyObject_InitVar`처럼 초기화됩니다.
이것은 튜플처럼 생성 시 크기를 결정할 수 있는 객체를 구현하는 데 유용합니다. 필드 배열을 같은 할당에 포함시키면, 할당 횟수가 줄어들어, 메모리 관리 효율성이 향상됩니다.
메모리를 할당하려고 이 함수를 직접 호출하는 것은 피하십시오. 대신 유형의
tp_alloc슬롯을 호출하십시오.유형의
tp_alloc슬롯을 채울 때, :c:func:`PyType_GenericAlloc`을 사용하여 이 매크로를 단순히 호출하는 사용자 정의 함수보다 선호합니다.이것은 :c:member:`~PyTypeObject.tp_flags`에서 :c:macro:`Py_TPFLAGS_HAVE_GC`가 설정된 객체에는 사용할 수 없습니다. 대신 :c:macro:`PyObject_GC_NewVar`를 사용하십시오.
이 함수로 할당된 메모리는
PyObject_Free()(일반적으로 객체의tp_free슬롯을 통해 호출됨)로 해제되어야 합니다.참고
반환된 메모리가 초기화되기 전에 완전히 0으로 설정되어 있을 것이라고 보장할 수 없습니다.
참고
이 매크로는 주어진 유형의 완전히 초기화된 객체를 구성하지 않습니다. 단지 메모리를 할당하고
tp_init에 의한 추가 초기화를 위해 준비할 뿐입니다. 완전히 초기화된 객체를 구성하려면 typeobj 를 호출하십시오. 예:PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
더 보기
- 모듈 객체
확장 모듈을 할당하고 만듭니다.
소프트 폐지된 에일리어스¶
버전 3.15부터 약하게 폐지 <Soft deprecated>.
이것들은 기존 함수 및 매크로에 대한 에일리어스입니다. 이는 순전히 하위 호환성을 위해 존재합니다.
소프트 폐지된 에일리어스 |
함수 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|