PySequence_SetItem
John Machin
sjmachin at lexicon.net
Wed Aug 16 18:10:22 EDT 2006
John Machin wrote:
> Jack Diederich wrote:
>
> > Changing the PySequence_SetItem to PyList_SetItem and dropping the
> > DECREF works for me too (PyList functions steal a reference). I also
> > tried setting the list to length 1, still no dice. The PySequence
> > version segs under 2.4 and 2.5. It segs even when the Int is changed
> > to a String.
> >
> > Yikes, I'll poke around some more.
>
> Yikes indeed.
>
> Not the OP's problem, but a bug in the manual: example in the chapter
> that the OP was reading acts as though the 2nd arg to PyObject_SetItem
> is a C int (as it is for the List and Sequence varieties) -- it is in
> fact a (PyObject *), which explains the SystemError that I got.
>
OK, here's the story:
PyList_New fills the list with NULLs.
PyList_SetItem applies Py_XDECREF to the previous contents.
PySequence_SetItem calls the function in the object's sq_ass_item slot.
This is list_ass_item, which as the OP noted, applies Py_DECREF to the
previous contents. Splat when NULL.
I wonder how long it's been like that?
FYI, the buggy manual section is
http://docs.python.org/api/refcountDetails.html
Cheers,
John
More information about the Python-list
mailing list