On Mon, Mar 4, 2019 at 12:12 PM Neil Girdhar <mistersh...@gmail.com> wrote:

> On Mon, Mar 4, 2019 at 2:26 PM Guido van Rossum <gu...@python.org> wrote:
> >
> > * Dicts are not like sets because the ordering operators (<, <=, >, >=)
> are not defined on dicts, but they implement subset comparisons for sets. I
> think this is another argument pleading against | as the operator to
> combine two dicts.
> >
>
> I feel like dict should be treated like sets with the |, &, and -
> operators since in mathematics a mapping is sometimes represented as a
> set of pairs with unique first elements.  Therefore, I think the set
> metaphor is stronger.
>

That ship has long sailed.


> > * Regarding how to construct the new set in __add__, I now think this
> should be done like this:
> >
> > class dict:
> >     <other methods>
> >     def __add__(self, other):
> >         <checks that other makes sense, else return NotImplemented>
> >         new = self.copy()  # A subclass may or may not choose to override
> >         new.update(other)
> >         return new
>
> I like that, but it would be inefficient to do that for __sub__ since
> it would create elements that it might later delete.
>
> def __sub__(self, other):
>  new = self.copy()
>  for k in other:
>   del new[k]
> return new
>
> is less efficient than
>
> def __sub__(self, other):
>  return type(self)({k: v for k, v in self.items() if k not in other})
>
> when copying v is expensive.  Also, users would probably not expect
> values that don't end up being returned to be copied.
>

No, the values won't be copied -- it is a shallow copy that only increfs
the keys and values.

-- 
--Guido van Rossum (python.org/~guido)
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to