<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-02-24 14:38 GMT+01:00 David Gobbi <span dir="ltr"><<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On Wed, Feb 24, 2016 at 2:46 AM, Elvis Stansvik <span dir="ltr"><<a href="mailto:elvis.stansvik@orexplore.com" target="_blank">elvis.stansvik@orexplore.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><br></div>So my question is, can I always rely on this behavior when working with pipelines through the Python wrappers? Or are there cases where VTK will do things in C++ "behind the back" of the Python garbage collector?<br></div></div></div></div></div></blockquote><div><br></div></span><div>Yes, you can rely on this behavior.  As expected, the vtkRenderWindow C++ object holds a reference to the renderer, which holds references, to the actors, etc.</div><div><br></div><div>The Python wrappers provide a python "wrapper" object for each C++ object that is exposed to python.  At the end of the scope, the reference count of the python object is decref'd.  If this causes the python object to destruct, then the reference count of the underlying C++ object is decref'd.  The underlying C++ object destructs if its reference count reaches zero.</div><span class=""><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div></div></div>And in fact, most of the time you probably want to keep references to a lot of things, to be able to reconfigure the pipeline. I'm just wondering if there are any gotchas to watch out for wrt to garbage collection when not keeping references. If there are any "best practices" so to speak.<br></div></div></div></blockquote><div><br></div></span><div>There are no best practices, because garbage collection is something that most users are not supposed to worry about.</div></div></div></div></blockquote><div><br></div><div>Thanks a lot for the clarifications. The reason I was asking was because I was working with some VTK Python code that looked like it was being very careful to keep a reference to certain objects. But I realize now that this was probably mostly an artifact of how the code was structured.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Because garbage collection is done via reference counting, sometimes gc is delayed due to reference cycles.  But both VTK and Python have cycle detection in their garbage collectors.</div></div></div></div></blockquote><div><br></div><div>Ah yes, I remember reading that observers can give rise to reference cycles.<br><br></div><div>Elvis<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="HOEnZb"><font color="#888888"><div><br></div><div> - David</div></font></span></div></div></div>
</blockquote></div><br></div></div>