python - PyList_GetItem 不是幂等的

标签 python swig idempotent

我正在尝试 Swig,并分别具有以下 C 代码和接口(interface):

// example.c
#include <Python/Python.h>
PyObject *test ( PyObject *self, int i) {
    PyObject **x;
    x = malloc(sizeof(PyObject *));
    *x = PyList_GetItem(self, i);
    return *x;
}

// example.i
%module example
%{
/* Put header files here or function declarations like below */
extern PyObject* test(PyObject *self, int i);
%}

extern PyObject* test(PyObject *self, int i);

它编译正确,我可以很好地导入扩展模块。事实上,当我将变量 a 定义为 [{1:1},{2:2}] 并第一次执行 example.test(a, 0) 时,它正确返回 {1,1}。当我在 Python shell 中输入 a 时,我得到了预期的 [{1:1},{2:2}] 。当我再次尝试 example.test(a,0) 时,出现段错误。有什么想法为什么会发生这种情况吗?

最佳答案

PyObject* PyList_GetItem(PyObject *list, Py_ssize_t index)
Return value: Borrowed reference.

在返回对象之前增加对象。

关于python - PyList_GetItem 不是幂等的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18606075/

相关文章:

python - 是什么导致此 Python 代码出现 "unbound method __init__() must be called with instance as first argument"?

python - 为元组列表创建映射的简便方法

python - 如何从 bash 脚本中杀死 Django runserver 子进程?

java - 调用 SWIG 生成的 Getter 的段错误

在 HP-UX 上使用 Swig 时 Java 崩溃

ruby-on-rails - Sidekiq 幂等性、N+1 查询和死锁

python - 如何创建根据文件名标记非结构化数据集的 csv 文件

python - 如何将 python 对象传递给需要指针类型的函数

Ansible lineinfile insertafter 重复行

http - 取消订阅链接是否需要幂等?