From e490502e04f3c3847bd58183f4b6f284880c8709 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sun, 10 Apr 2005 17:32:35 +0000 Subject: SF bug #1179957: Missing def'n of equality for set elements --- Doc/lib/libsets.tex | 5 ++++- Doc/lib/libstdtypes.tex | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Doc/lib/libsets.tex b/Doc/lib/libsets.tex index 8085ab1..0cd5e2e 100644 --- a/Doc/lib/libsets.tex +++ b/Doc/lib/libsets.tex @@ -30,7 +30,10 @@ method but omits methods which alter the contents of the set. Both abstract class useful for determining whether something is a set: \code{isinstance(\var{obj}, BaseSet)}. -The set classes are implemented using dictionaries. As a result, sets +The set classes are implemented using dictionaries. Accordingly, the +requirements for set elements are the same as those for dictionary keys; +namely, that the element defines both \method{__eq__} and \method{__hash__}. +As a result, sets cannot contain mutable elements such as lists or dictionaries. However, they can contain immutable collections such as tuples or instances of \class{ImmutableSet}. For convenience in implementing diff --git a/Doc/lib/libstdtypes.tex b/Doc/lib/libstdtypes.tex index c464517..03bccd9 100644 --- a/Doc/lib/libstdtypes.tex +++ b/Doc/lib/libstdtypes.tex @@ -1220,6 +1220,9 @@ Accordingly, sets do not implement the \method{__cmp__} method. Since sets only define partial ordering (subset relationships), the output of the \method{list.sort()} method is undefined for lists of sets. +Set elements are like dictionary keys; they need to define both +\method{__hash__} and \method{__eq__} methods. + Binary operations that mix \class{set} instances with \class{frozenset} return the type of the first operand. For example: \samp{frozenset('ab') | set('bc')} returns an instance of \class{frozenset}. -- cgit v0.12