code: def intersection(self, *others):
          r
          result = self.__copy__()
          _elements = result._elements
          _total = result._total
          for other in map(self._as_mapping, others):
              for element, multiplicity in list(_elements.items()):
                  new_multiplicity = other.get(element, 0)
                  if new_multiplicity < multiplicity:
                      if new_multiplicity > 0:
                          _elements[element] = new_multiplicity
                          _total -= multiplicity - new_multiplicity
                      else:
                          del _elements[element]
                          _total -= multiplicity
          result._total = _total
          return result