From: Raymond Hettinger Date: Sun, 10 Apr 2005 17:32:35 +0000 (+0000) Subject: SF bug #1179957: Missing def'n of equality for set elements X-Git-Tag: v2.5a0~1824 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e490502e04f3c3847bd58183f4b6f284880c8709;p=python SF bug #1179957: Missing def'n of equality for set elements --- diff --git a/Doc/lib/libsets.tex b/Doc/lib/libsets.tex index 8085ab1d48..0cd5e2e283 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 c46451778c..03bccd9495 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}.