<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _var_changes(self):
 """Determines the list of variables whose values have changed since the last cell execution. """
       
        result = []
        variables = self.shell.run_line_magic("who_ls", "")
        if variables is None:
            return result

        import inspect
        for varname in variables:
            varobj = self.shell.user_ns.get(varname, None)
            if varobj is None:
                continue

            #We need to make sure that the objects have types that make
            #sense. We auto-decorate all classes and functions; also modules and
            #other programming constructs are not variables.
            keep = False
            for ifunc in inspectors:
                if getattr(inspect, ifunc)(varobj):
                    break
            else:
                keep = True    

            if keep:
                whoid = id(varobj)
                if varname not in self.who or self.who[varname] != whoid:
                    result.append((varname, varobj))
                    self.who[varname] = whoid
        return result