from collections import deque


def depth(d):
    """
    Copied from https://stackoverflow.com/a/23499088

    Used to determine the depth of our config trees and fill them
    """
    queue = deque([(id(d), d, 1)])
    memo = set()
    while queue:
        id_, o, level = queue.popleft()
        if id_ in memo:
            continue
        memo.add(id_)
        if isinstance(o, dict):
            queue += ((id(v), v, level + 1) for v in o.values())
    return level