Я собираюсь построить модуль C для Python 3.7, который поменяет местами два элемента списка. Вот мой код, где читаются индексы двух элементов и списка:
static PyObject *st_change(PyObject *self, PyObject *args){
PyObject *pList;
PyObject *tmp1;
PyObject *tmp2;
int i,j;
Py_ssize_t n;
if (!PyArg_ParseTuple(args, "O!ll", &PyList_Type, &pList,&i,&j)) {
PyErr_SetString(PyExc_TypeError, "parameters are wrong.");
return NULL;
}
n = PyList_Size(pList);
tmp1 = PyList_GetItem(pList,i);
tmp2 = PyList_GetItem(pList,j);
PyList_SetItem(pList,i,tmp2);
PyList_SetItem(pList,j,tmp1);
Py_INCREF(pList);
return pList;
}
Это работает для одномерных списков, но когда я пытаюсь поменять элементы в списке списков, Python закрывается. Например, при вызове
my_module.st_change([1,2,3],0,1)
результат равен
[2,1,3]
, а когда я звоню
my_module.st_change([[1,2,3],[4,5,6],[7,8,9]],0,1)
python перезапуск оболочки
Я совершенно новичок в C Python API, поэтому буду очень признателен, если кто-то сможет указать мне правильное направление. Спасибо