On 09/14/2013 11:42 AM, Steven D'Aprano wrote:

Perhaps you should try it and find out.

Hi Steven, thanks for your answer. I tried it with Python 3.4a2, but I did not see any output from __del__().

[steve@ando ~]$ python3.4 -E
Python 3.4.0a1+ (default:becbb65074e1, Aug 26 2013, 03:57:58)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>class A:
....      def __init__(self, a):
....          self.a = a
....          print('In A.__init__()')
....      def __del__(self):
....          print('Goodbye from A()')
....
>>>class B:
....      def __init__(self):
....          self.b = A(self) # Reference cycle
....          print('In B.__init__()')
....      def __del__(self):
....          print('Goodbye from B()')
....
>>>b = B()
In A.__init__()
In B.__init__()
>>>del b
>>>
>>>
>>>import gc
>>>gc.collect()
Goodbye from B()
Goodbye from A()
4

I thought in this case, the __del__() methods should have called automatically...

Does that answer your question?

Yes, thanks a lot Steven, I saw the gc.collect() does not call the __del__() method in Python 3.3, so I think I will look at the documentation of gc in order to understand better. Thanks again, Marco


--
Marco Buttu
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to