def __new__(cls, source=None, root=None, *args, **kwargs):
    """Create new Mutable object
        
        Begin by creating a new object of type cls using super().__new__. If 
        super().__new__ takes arguments, I assume the first argument is a 
        source object (the new methods of many literals work this way). 
        Otherwise, begin by creating an empty new object.
        
        Then set the root, python type, and empty tracked attribute names 
        registry. The root is used to register changes with the root Mutable 
        object. The python type is used to check for valid attribute setting 
        (see __setattr__). The tracked attribute registry is used for 
        assigning new root mutable objects.
        """
    try:
        new = super().__new__(cls, source)
    except:
        new = super().__new__(cls)
    new._python_type = type(source) if source is not None else None
    new._tracked_attr_names = set()
    new.root = root
    return new
