'D.update([E, ]**F) -> None.  Update D from mapping/iterable E and F.
If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
In either case, this is followed by: for k, v in F.items(): D[k] = v'

def update(*args, **kwds):

    if (not args):
        raise TypeError("descriptor    'update'    of    'MutableMapping'    object    needs    an    argument")
    self = args[0]
    args = args[1:]
    if (len(args) > 1):
        raise TypeError(('update    expected    at    most    1    arguments,    got    %d' % len(args)))
    if args:
        other = args[0]
        if isinstance(other, Mapping):
            for key in other:
                self[key] = other[key]
        elif hasattr(other, 'keys'):
            for key in other.keys():
                self[key] = other[key]
        else:
            for (key, value) in other:
                self[key] = value
    for (key, value) in kwds.items():
        self[key] = value
