def traverse_cached(node, depth, cache={}): if node in cache: print('Already in cache: %s' % node.name) return cache[node] = None print('__'*depth + node.name) for ref in node.refs: traverse_cached(ref, depth+1, cache=cache)