execfile question

Bengt Richter bokr at oz.net
Wed Feb 20 04:42:08 CET 2002


On Tue, 19 Feb 2002 16:23:19 +0300, Kerim Borchaev <warkid at storm.ru> wrote:

>Mark Barclay answered:
>
>> "del c" will cause your __del__() to be called.
>yes
>
>> So will any other action that causes your instance to be garbage-collected.
>I don't get it.
>And can you explain who holds a reference on C instance in my example
>when 'execfile' completes?
>
I suspect the anonymous directory you passed to execfile. Apparently
dictionaries don't always get cleared automatically. I don't know
if this is a bug. But if you do:

xdict = {}
execfile('executable.py', xdict)
xdict.clear()    # just del xdict doesn't do it

I think your example will give you what you expected.

Using default dicts like this:

execfile('executable.py')

works too.

Regards,
Bengt Richter


>Kerim.
>
>----------------------------------
>My original question:
>
>> Can someone explain why while running this script I don't see C.__del__
>> eventually called?
>>
>> For me the output of it's execution is:
>>
>> >main.py
>> it's me
>> init
>> executed
>> >
>>
>> ##main.py######################
>> execfile('executable.py', {})
>> print 'executed'
>> ########################
>>
>> ##executable.py######################
>> print "it's me"
>> class C:
>>     def __init__(self):
>>         print 'init'
>>     def __del__(self):
>>         print 'deleted'
>>
>> c = C()
>> ########################
>>
>> Thanks in advance.
>
>
>




More information about the Python-list mailing list