<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _def_lookup(self, variable):
 # pylint:disable=no-self-use """ This is a backward lookup in the previous defs. Note that, as we are using VSA, it is possible that `variable` is affected by several definitions. :param angr.analyses.ddg.LiveDefinitions live_defs: The collection of live definitions. :param SimVariable: The variable to lookup for definitions. :returns: A dict {stmt:labels} where label is the number of individual addresses of `addr_list` (or the actual set of addresses depending on the keep_addrs flag) that are definted by stmt. """


        prevdefs = {}

        for code_loc in self._live_defs.lookup_defs(variable):
            # Label edges with cardinality or actual sets of addresses
            if isinstance(variable, SimMemoryVariable):
                type_ = 'mem'
            elif isinstance(variable, SimRegisterVariable):
                type_ = 'reg'
            else:
                raise AngrDDGError('Unknown variable type %s' % type(variable))

            prevdefs[code_loc] = {
                'type': type_,
                'data': variable
            }

        return prevdefs