Hooking into Python's memory management

Daniel Neilson ddneilson at gmail.com
Wed May 4 12:51:39 EDT 2011


Hello,
  I'm hoping that there will be someone here with sufficient expertise 
to answer a question on Python 3 for me.

  I work in the Computer Science department at a large Canadian 
University. We are currently doing a feasibility analysis for switching 
to using Python in our first year major-stream courses.

  Part of our first year curriculum requires that students be exposed to 
explicit dynamic memory allocation in the form of C++'s new/delete, C's 
malloc/free, etc. I realize that Python is garbage collected, and that 
there is never a need to explicitly allocate & deallocate objects. 
However, I am trying to determine whether or not it is possible to 
simulate that behaviour within Python via a module for the purposes of 
instruction.

  For these purposes, I would like to know whether it is possible within 
Python 3 to write a Python-only module that, essentially, hooks into the 
"constructor" and "destructor" of many of the Python built-in types 
(specifically list, dictionary, set, tuple, and string) so that the 
module can:
  1) Maintain a list of object id()'s for objects that have been 
created. Ideally, this list would also contain the file & line number 
where the object was created.
  2) Provide a "deallocate" function that will remove a given object's 
id() from the list from (1).
  3) Print out an error message if the python script terminates with a 
non-empty list from (1). Preferably with a list of objects that are 
still "allocated."

  Baring a Python-only module, would this behaviour be possible to add 
via a C-language module?

  A module that hooked in to all memory allocation, and inspected the 
type of the object being allocated to conditionally add the object's 
id() to the list would also suffice.

  In either case, if such a module is possible, any pointers you could 
provide regarding how to implement such a module would be appreciated.

Thank you for your time,
  Daniel



More information about the Python-list mailing list