def deepupdate(<EOL>mapping: abc.MutableMapping, other: abc.Mapping, listextend=False<EOL>):
def inner(other, previouskeys):<EOL><INDENT>"""<STR_LIT>"""<EOL>for key, value in other.items():<EOL><INDENT>if isinstance(value, abc.Mapping):<EOL><INDENT>inner(value, (*previouskeys, key))<EOL><DEDENT>else:<EOL><INDENT>node = mapping<EOL>for previouskey in previouskeys:<EOL><INDENT>node = node.setdefault(previouskey, {})<EOL><DEDENT>target = node.get(key)<EOL>if (<EOL>listextend<EOL>and isinstance(target, abc.MutableSequence)<EOL>and isinstance(value, abc.Sequence)<EOL>):<EOL><INDENT>target.extend(value)<EOL><DEDENT>else:<EOL><INDENT>node[key] = value<EOL><DEDENT><DEDENT><DEDENT><DEDENT>inner(other, ())<EOL>
update one dictionary from another recursively. Only individual
    values will be overwritten--not entire branches of nested
    dictionaries.