modify a python list from C++
c++, ctypes, python
Solution
Given only that pointer, you cannot extend the list. What you are passing to C++ is the address of the array internally used to implement the Python list. This cannot be an `std::vector`, as Python lists are not implemented as STL vectors, but as C-level arrays of Python object references. These arrays do not contain a backpointer to the Python list object.
To mutate the list, take a look at the documentation and link your C++ code with the Python library. If you really must call your C++ function from ctypes, call it with the `id` of the list to get the pointer to the list, as opposed to its element array. Then you can operate on the list like this:
#include <Python.h>
extern "C"
void append_to_list(uintptr_t lst_id)
{
PyObject* lst = reinterpret_cast<PyObject*>(ptr);
PyObject* new_num = PyFloat_FromDouble(2.0);
if (!new_num) {
... PyFloat creation failed ...
}
int ret = PyList_Append(lst, new_num);
Py_DECREF(new_num);
if (ret) {
... PyList_Append failed ...
}
}
Problem
I got a Python list which I can obtain its pointer and pass this pointer address to C++ to work on ``` MyPointer = TheList.as_pointer() ``` now I pass this address to C++ with ctypes in C++ I can do the following: ``` *(float*) MyPointer = 2.0f; //for example ``` and the Python values will update immediatly,now the problem is: how to extend or delete some values (like modify the list directly from C++) as I sense these data are a `std::vector` how to do `push_back` and so on to adjust size with a fast way (as iterating in Python is pretty much SLOW)