On Sun, Nov 23, 2014 at 2:48 AM, Ian Kelly <ian.g.ke...@gmail.com> wrote:
> On Sat, Nov 22, 2014 at 11:49 PM, Patrick Stinson <patrickk...@gmail.com> 
> wrote:
>> If I create a module with imp.new_module(name), how can I unload it so that 
>> all the references contained in it are set to zero and the module is 
>> deleted? deleting the reference that is returned doesn’t seem to do the job, 
>> and it’s not in sys.modules, so where is the dangling reference?
>
> How are you determining that the module is not deleted?

From my testing, using Python 3.4:

>>> for i in range(5): imp.new_module('spam')
...
<module 'spam'>
<module 'spam'>
<module 'spam'>
<module 'spam'>
<module 'spam'>
>>> import gc, types
>>> [m for m in gc.get_objects() if isinstance(m, types.ModuleType) and 
>>> m.__name__ == 'spam']
[<module 'spam'>]
>>> 42
42
>>> [m for m in gc.get_objects() if isinstance(m, types.ModuleType) and 
>>> m.__name__ == 'spam']
[]

In this case one of the created modules was hanging around because it
was still referenced by the special "_" variable of the interactive
interpreter. Evaluating a new expression cleared that out and deleted
the module. Maybe you're seeing the same thing.
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to