<div>When writing Python code, please consider the following issue:</div><div><a href="http://www.vtk.org/Bug/view.php?id=12139">http://www.vtk.org/Bug/view.php?id=12139</a>
</div><div>(here is the long discussion associated with it: <a href="http://www.vtk.org/pipermail/vtk-developers/2011-April/009757.html">http://www.vtk.org/pipermail/vtk-developers/2011-April/009757.html</a>)</div><div><br>

</div><div>Like VTK, Slicer contains some &quot;factory&quot; methods: </div><div> - vtkMRMLScene::CreateNodeByClass()</div><div> - vtkMRMLScene::GetNodesByClass()</div><div> - ...</div><div>Like in C++, it means that the functions return an object with a reference count of 1 that nobody &quot;owns&quot; and the caller must take care of releasing the object to avoid memory leak.</div>

<div><br></div><div>While there is workaround for some methods ( slicer.mrmlScene.CreateNodeByClass(&#39;vtkMRMLModelNode&#39;) should be replaced by slicer.vtkMRMLModelNode() ) there is currently no automatic/clean mechanism to release the object created by such methods.</div>

<div><br></div><div>The only &quot;hack&quot; that exists for now is to decrease the reference count manually in your code:</div><div>nodes = slicer.mrmlScene.GetNodesByClass(&#39;vtkMRMLLinearTransformNode&#39;)</div><div>

nodes.SetReferenceCount(1)      # ----&gt; (was 2, keep 1 for the python reference)</div><div>...</div><div><br></div><div>In C++, the following would apply:</div><div>vtkCollection* nodes = mrmlScene-&gt;GetNodesByClass(&quot;vtkMRMLLinearTransformNode&quot;);</div>

<div>...</div><div>nodes-&gt;Delete();</div><div><br></div><div>or using vtkSmartPointer:</div><div><div>vtkSmartPointer&lt;vtkCollection&gt; nodes;</div><div>nodes.TakeReference(mrmlScene-&gt;GetNodesByClass(&quot;vtkMRMLLinearTransformNode&quot;));</div>

<div>...</div></div><div><br></div><div>Thanks,</div><div>Julien.</div>