dict.update is special cased and does not end up calling __setitem___
        overriding to ensure it gets called.
        Below is the dict.update description:
        D.update([E, ]**F) -> None.  Update D from dict/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 in F: D[k] = F[k]
        code based on DictMixIn

def update(self, obj=None, **kwargs): # known special case of dict.update
        """
        dict.update is special cased and does not end up calling __setitem___
        overriding to ensure it gets called.
        Below is the dict.update description:
        D.update([E, ]**F) -> None.  Update D from dict/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 in F: D[k] = F[k]
        code based on DictMixIn
        """
        if obj is None:
            pass
        elif hasattr(obj, 'iteritems'):  # iteritems saves memory and lookups
            for k, v in obj.iteritems():
                self[k] = v
        elif hasattr(obj, 'keys'):
            for k in obj.keys():
                self[k] = obj[k]
        else:
            for k, v in obj:
                self[k] = v
        if kwargs:
            self.update(kwargs)