[EMAIL PROTECTED] wrote: > Now it would appear that if you **malloc an array of PyObjects** > (call it FOO[]) then you have an ambiguity.... > > The PyObject elements will be freed *for us* eventually by garbage > collector. > > Hence, we can't ever do 'free(FOO); ' because we don't know when > garbage collector will free FOO[0], FOO[1], FOO[2], etc.
you're not quite getting how reference counting works. the fact that you have a pointer to a Python object stuffed away somewhere is completely irrelevant to the Python garbage collector; all it cares about is the reference count of the object itself. if the reference count is not zero, someone somewhere might have a pointer to the object, so the object must be preserved. if the reference count drops to zero, nobody is supposed to have a pointer anymore, so the object can be removed. if you use malloc to allocate a memory block and store PyObject pointers in it, you must 1) make sure that the reference count is *incremented* (Py_INCREF) when you add the objects (unless the object is new; when you create an object, the reference count is set to 1). this tells Python that you have a pointer to an object that you plan to use some time in the future. 2) make sure that the reference count is *decremented* (Py_DECREF) if you remove the objects (this tells Python that *you* won't access the object any more; if nobody else uses it either, it can safely be removed). required reading: http://docs.python.org/api/objects.html </F> -- http://mail.python.org/mailman/listinfo/python-list