docs: def filter_object(obj, marks, presumption=DELETE):
      '''Filter down obj based on marks, presuming keys should be kept/deleted.
  
      Args:
          obj: The object to be filtered. Filtering is done in-place.
          marks: An object mapping id(obj) --> {DELETE,KEEP}
                 These values apply to the entire subtree, unless inverted.
          presumption: The default action to take on all keys.
      '''
      if isinstance(obj, list):
          keys = reversed(range(0, len(obj)))
      else:
          keys = obj.keys()
  
      for k in keys:
          v = obj[k]
          m = marks.get(id(v), UNSPECIFIED)
          if m == DELETE:
              del obj[k]  # an explicit deletion is irreversible.
          elif m == KEEP or presumption==KEEP:
              # keep descending, in case there are nodes we should delete.
              if isinstance(v, list) or isinstance(v, dict):
                  filter_object(v, marks, presumption=KEEP)
          elif m == UNSPECIFIED:
              # ... and presumption == DELETE
              if isinstance(v, list) or isinstance(v, dict):
                  filter_object(v, marks, presumption=DELETE)
                  if len(v) == 0:
                      del obj[k]
              else:
                  del obj[k]