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

:return     { <orb.Column>: ( <variant> old, <variant> new), .. }