code: def changes(self, columns=None, recurse=True, flags=0, inflated=False):
          
          output = {}
          is_record = self.isRecord()
          schema = self.schema()
          columns = [schema.column(c) for c in columns] if columns else \
                     schema.columns(recurse=recurse, flags=flags).values()
  
          context = self.context(inflated=inflated)
          with ReadLocker(self.__dataLock):
              for col in columns:
                  old, curr = self.__values.get(col.name(), (None, None))
                  if col.testFlag(col.Flags.ReadOnly):
                      continue
                  elif not is_record:
                      old = None
  
                  check_old = col.restore(old, context)
                  check_curr = col.restore(curr, context)
                  try:
                      different = check_old != check_curr
                  except StandardError:
                      different = True
  
                  if different:
                      output[col] = (check_old, check_curr)
  
          return output
docs: Returns a dictionary of changes that have been made
          to the data from this record.
  
          :return     { <orb.Column>: ( <variant> old, <variant> new), .. }