I think you could make this more pythonic. Instead of building up a list of nodes and then using it as a blacklist, you could move both of these iterations into a function which:

* yields the node if it hasn't changed
* stops the node if it has changed

the assignment would become:

```
self.instances = list(trim_old_nodes())
```