code: def copy(self):
      
      products_by_target = defaultdict(OrderedSet)
      for key, value in self._products_by_target.items():
        products_by_target[key] = OrderedSet(value)
      return UnionProducts(products_by_target=products_by_target)
docs: Returns a copy of this UnionProducts.
  
      Edits to the copy's mappings will not affect the product mappings in the original.
      The copy is shallow though, so edits to the copy's product values will mutate the original's
      product values.
  
      :API: public
  
      :rtype: :class:`UnionProducts`