docs: def difference(self, *others):
          r"""Return a new multiset with all elements from the others removed.
  
          >>> ms = Multiset('aab')
          >>> sorted(ms.difference('bc'))
          ['a', 'a']
  
          You can also use the ``-`` operator for the same effect. However, the operator version
          will only accept a set as other operator, not any iterable, to avoid errors.
  
          >>> ms = Multiset('aabbbc')
          >>> sorted(ms - Multiset('abd'))
          ['a', 'b', 'b', 'c']
  
          For a variant of the operation which modifies the multiset in place see
          :meth:`difference_update`.
  
          Args:
              others: The other sets to remove from the multiset. Can also be any :class:`~typing.Iterable`\[~T]
                  or :class:`~typing.Mapping`\[~T, :class:`int`] which are then converted to :class:`Multiset`\[~T].
  
          Returns:
              The resulting difference multiset.
          """
          result = self.__copy__()
          _elements = result._elements
          _total = result._total
          for other in map(self._as_multiset, others):
              for element, multiplicity in other.items():
                  if element in _elements:
                      old_multiplicity = _elements[element]
                      new_multiplicity = old_multiplicity - multiplicity
                      if new_multiplicity > 0:
                          _elements[element] = new_multiplicity
                          _total -= multiplicity
                      else:
                          del _elements[element]
                          _total -= old_multiplicity
          result._total = _total
          return result