擅长:python、mysql、java
<p>如果您预先知道列表的大小,那么创建具有正确大小的列表并使用<code>PyList_SetItem()</code>通常会更快。在</p>
<p>您的代码完全错误,<code>trio_tmp</code>未初始化。在</p>
<p>试试这个:</p>
<pre><code>PyObject * bugmaybe(PyObject *self, PyObject *args)
{
PyObject * trio=PyList_New(3);
PyObject * otmp = PyFloat_FromDouble(1.2);
PyList_SetItem(trio,0,otmp);
otmp = PyFloat_FromDouble(2.3);
PyList_SetItem(trio,1,otmp);
PyList_Append(trio,2, PyList_New(0));
return trio;
}
</code></pre>
<p>如果您真的想使用<code>PyList_Append</code>,那么您的代码基本上是正常的,只是缺少了<code>trio_tmp</code>的初始化和结尾多余的Py_incrif。在</p>
^{pr2}$
<p>上述代码相当于:</p>
<pre><code> trio = []
trio_tmp = []
otmp = 1.2
trio_tmp.append(otmp)
otmp = 2.3
trio_tmp.append(otmp)
trio.append(trio_tmp)
</code></pre>
<p>希望有帮助。主要的提示是在文档中,如果它说“偷取引用”,那么函数基本上就获得了所有权;如果它说“新引用”,那么它会为你做一个incriff;如果什么也没说,它可能会根据需要执行incrif和DECREF对。在</p>