casting_python.pyx 654 Bytes
Newer Older
1
from cpython.ref cimport PyObject
2 3 4

cdef extern from *:
    ctypedef Py_ssize_t Py_intptr_t
5 6 7 8

python_string = "foo"

cdef void* ptr = <void*>python_string
9
cdef Py_intptr_t adress_in_c = <Py_intptr_t>ptr
10 11 12
address_from_void = adress_in_c        # address_from_void is a python int

cdef PyObject* ptr2 = <PyObject*>python_string
13
cdef Py_intptr_t address_in_c2 = <Py_intptr_t>ptr2
14 15 16 17 18 19
address_from_PyObject = address_in_c2  # address_from_PyObject is a python int

assert address_from_void == address_from_PyObject == id(python_string)

print(<object>ptr)                     # Prints "foo"
print(<object>ptr2)                    # prints "foo"