code: def _update_hasher(hasher, data):
      if isinstance(data, (tuple, list, zip)):
          needs_iteration = True
      elif (util_type.HAVE_NUMPY and isinstance(data, np.ndarray) and
            data.dtype.kind == 'O'):
          needs_iteration = True
      else:
          needs_iteration = False
      if needs_iteration:
          SEP = b'SEP'
          iter_prefix = b'ITER'
          iter_ = iter(data)
          hasher.update(iter_prefix)
          try:
              for item in iter_:
                  prefix, hashable = _covert_to_hashable(data)
                  binary_data = SEP + prefix + hashable
                  hasher.update(binary_data)
          except TypeError:
              _update_hasher(hasher, item)
              for item in iter_:
                  hasher.update(SEP)
                  _update_hasher(hasher, item)
      else:
          prefix, hashable = _covert_to_hashable(data)
          binary_data = prefix + hashable
          hasher.update(binary_data)