def object_full_name(obj: object):
    """Get a full qualified name of the object.

    This function will returned the full name, including the module name (class name or builtin)
    where the object is declared, and the object defined name. Each identical object will have
    different full name.

    From https://stackoverflow.com/a/2020083

    Args:
        obj (object): The object.

    Returns:
        str: The object's full qualified name.
    """
    module = obj.__class__.__module__
    if module is None or module == str.__class__.__module__:
        return obj.__class__.__name__  # Avoid reporting __builtin__
    else:
        return module + '.' + obj.__class__.__name__