[EMAIL PROTECTED] > I would think everytime you add an item to a list you must increase > reference count of that item.
_Someone_ needs to. When the function called to add the item does the incref itself, then it would be wrong for the caller to also incref the item. > http://docs.python.org/api/refcountDetails.html has an example that > seems to contradict that.... > > int > set_all(PyObject *target, PyObject *item) > { > int i, n; > > n = PyObject_Length(target); > if (n < 0) > return -1; > for (i = 0; i < n; i++) { > if (PyObject_SetItem(target, i, item) < 0) > return -1; > } > return 0; > } > > *WHY* don't you need a Py_INCREF(item); in the for loop!?!?!? You should take a break, and read that section again later ;-) The _point_ of that example is in fact to illustrate that you don't need to incref when calling PyObject_SetItem(). While I can't know, I'm guessing that you're still "seeing" PyList_SetItem() here, which has radically different behavior. PyList_SetItem() steals a reference to its second argument, but PyObject_SetItem() does not. Read the whole section again from its start, and this should be much clearer the second time through. -- http://mail.python.org/mailman/listinfo/python-list