diff --git a/Doc/lib/libsets.tex b/Doc/lib/libsets.tex index 8085ab1d48e..0cd5e2e2831 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 c46451778cb..03bccd94956 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}.