code: def notify_changes(self, changes):
          # type: (List[List]) -> CallbackResponses
          
          ret = []
          child_changes = {}
          for change in changes:
              # Add any changes that our children need to know about
              self._add_child_change(change, child_changes)
  
          # If we have update subscribers, serialize at this level
          if self.update_requests:
              serialized = serialize_object(self.data)
              for request in self.update_requests:
                  ret.append(request.update_response(serialized))
  
          # If we have delta subscribers, serialize the changes
          if self.delta_requests:
              for change in changes:
                  change[-1] = serialize_object(change[-1])
              for request in self.delta_requests:
                  ret.append(request.delta_response(changes))
  
          # Now notify our children
          for name, child_changes in child_changes.items():
              ret += self.children[name].notify_changes(child_changes)
          return ret
docs: Set our data and notify anyone listening
  
          Args:
              changes (list): [[path, optional data]] where path is the path to
                  what has changed, and data is the unserialized object that has
                  changed
  
          Returns:
              list: [(callback, Response)] that need to be called