def _hash_data(data):
 if isinstance(data, function.Function):
  data = copy.deepcopy(data)
 if (not isinstance(data, six.string_types)):
  if isinstance(data, collections.Sequence):
   return hash(tuple((_hash_data(d) for d in data)))
  if isinstance(data, collections.Mapping):
   item_hashes = ((hash(k) ^ _hash_data(v)) for (k, v) in data.items())
   return six.moves.reduce(operator.xor, item_hashes, 0)
 return hash(data)

def _hash_data ( data ) : if isinstance ( data , function . Function ) : data = copy . deepcopy ( data ) if ( not isinstance ( data , six . string_types ) ) : if isinstance ( data , collections . Sequence ) : return hash ( tuple ( ( _hash_data ( d ) for d in data ) ) ) if isinstance ( data , collections . Mapping ) : item_hashes = ( ( hash ( k ) ^ _hash_data ( v ) ) for ( k , v ) in data . items ( ) ) return six . moves . reduce ( operator . xor , item_hashes , 0 ) return hash ( data )
return a stable hash value for an arbitrary parsed-json data snippet .