| 
									
										
										
										
											2001-10-12 19:01:43 +00:00
										 |  |  | \chapter{Reference Counting \label{countingRefs}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The macros in this section are used for managing reference counts | 
					
						
							|  |  |  | of Python objects. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{cfuncdesc}{void}{Py_INCREF}{PyObject *o} | 
					
						
							|  |  |  |   Increment the reference count for object \var{o}.  The object must | 
					
						
							|  |  |  |   not be \NULL; if you aren't sure that it isn't \NULL, use | 
					
						
							|  |  |  |   \cfunction{Py_XINCREF()}. | 
					
						
							|  |  |  | \end{cfuncdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{cfuncdesc}{void}{Py_XINCREF}{PyObject *o} | 
					
						
							|  |  |  |   Increment the reference count for object \var{o}.  The object may be | 
					
						
							|  |  |  |   \NULL, in which case the macro has no effect. | 
					
						
							|  |  |  | \end{cfuncdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{cfuncdesc}{void}{Py_DECREF}{PyObject *o} | 
					
						
							|  |  |  |   Decrement the reference count for object \var{o}.  The object must | 
					
						
							|  |  |  |   not be \NULL; if you aren't sure that it isn't \NULL, use | 
					
						
							|  |  |  |   \cfunction{Py_XDECREF()}.  If the reference count reaches zero, the | 
					
						
							|  |  |  |   object's type's deallocation function (which must not be \NULL) is | 
					
						
							|  |  |  |   invoked. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   \warning{The deallocation function can cause arbitrary Python code | 
					
						
							|  |  |  |   to be invoked (e.g. when a class instance with a \method{__del__()} | 
					
						
							|  |  |  |   method is deallocated).  While exceptions in such code are not | 
					
						
							|  |  |  |   propagated, the executed code has free access to all Python global | 
					
						
							|  |  |  |   variables.  This means that any object that is reachable from a | 
					
						
							|  |  |  |   global variable should be in a consistent state before | 
					
						
							|  |  |  |   \cfunction{Py_DECREF()} is invoked.  For example, code to delete an | 
					
						
							|  |  |  |   object from a list should copy a reference to the deleted object in | 
					
						
							|  |  |  |   a temporary variable, update the list data structure, and then call | 
					
						
							|  |  |  |   \cfunction{Py_DECREF()} for the temporary variable.} | 
					
						
							|  |  |  | \end{cfuncdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{cfuncdesc}{void}{Py_XDECREF}{PyObject *o} | 
					
						
							|  |  |  |   Decrement the reference count for object \var{o}.  The object may be | 
					
						
							|  |  |  |   \NULL, in which case the macro has no effect; otherwise the effect | 
					
						
							|  |  |  |   is the same as for \cfunction{Py_DECREF()}, and the same warning | 
					
						
							|  |  |  |   applies. | 
					
						
							|  |  |  | \end{cfuncdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-14 19:07:35 +00:00
										 |  |  | \begin{cfuncdesc}{void}{Py_CLEAR}{PyObject *o} | 
					
						
							|  |  |  |   Decrement the reference count for object \var{o}.  The object may be | 
					
						
							|  |  |  |   \NULL, in which case the macro has no effect; otherwise the effect | 
					
						
							|  |  |  |   is the same as for \cfunction{Py_DECREF()}, except that the argument | 
					
						
							| 
									
										
										
										
											2004-07-26 19:25:54 +00:00
										 |  |  |   is also set to \NULL.  The warning for \cfunction{Py_DECREF()} does | 
					
						
							| 
									
										
										
										
											2004-07-14 19:07:35 +00:00
										 |  |  |   not apply with respect to the object passed because the macro | 
					
						
							|  |  |  |   carefully uses a temporary variable and sets the argument to \NULL | 
					
						
							| 
									
										
										
										
											2004-07-26 19:25:54 +00:00
										 |  |  |   before decrementing its reference count. | 
					
						
							| 
									
										
										
										
											2004-07-14 19:07:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   It is a good idea to use this macro whenever decrementing the value | 
					
						
							|  |  |  |   of a variable that might be traversed during garbage collection. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \versionadded{2.4} | 
					
						
							|  |  |  | \end{cfuncdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-22 17:23:49 +00:00
										 |  |  | The following functions are for runtime dynamic embedding of Python: | 
					
						
							|  |  |  | \cfunction{Py_IncRef(PyObject *o)}, \cfunction{Py_DecRef(PyObject *o)}. | 
					
						
							|  |  |  | They are simply exported function versions of \cfunction{Py_XINCREF()} and  | 
					
						
							|  |  |  | \cfunction{Py_XDECREF()}, respectively. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-12 19:01:43 +00:00
										 |  |  | The following functions or macros are only for use within the | 
					
						
							|  |  |  | interpreter core: \cfunction{_Py_Dealloc()}, | 
					
						
							|  |  |  | \cfunction{_Py_ForgetReference()}, \cfunction{_Py_NewReference()}, as | 
					
						
							|  |  |  | well as the global variable \cdata{_Py_RefTotal}. |