7. Set Types — set
, frozenset
¶
A set object is an unordered collection of distinct hashable objects.
Common uses include membership testing, removing duplicates from a sequence, and
computing mathematical operations such as intersection, union, difference, and
symmetric difference.
(For other containers see the built in dict
, list
,
and tuple
classes, and the collections
module.)
New in version 2.4.
Like other collections, sets support x in set
, len(set)
, and for x in
set
. Being an unordered collection, sets do not record element position or
order of insertion. Accordingly, sets do not support indexing, slicing, or
other sequence-like behavior.
There are currently two built-in set types, set
and frozenset
.
The set
type is mutable — the contents can be changed using methods
like add()
and remove()
. Since it is mutable, it has no
hash value and cannot be used as either a dictionary key or as an element of
another set. The frozenset
type is immutable and hashable —
its contents cannot be altered after it is created; it can therefore be used as
a dictionary key or as an element of another set.
As of Python 2.7, non-empty sets (not frozensets) can be created by placing a
comma-separated list of elements within braces, for example: {'jack',
'sjoerd'}
, in addition to the set
constructor.
The constructors for both classes work the same:
-
class
set
([iterable])¶ -
class
frozenset
([iterable])¶ Return a new set or frozenset object whose elements are taken from iterable. The elements of a set must be hashable. To represent sets of sets, the inner sets must be
frozenset
objects. If iterable is not specified, a new empty set is returned.Instances of
set
andfrozenset
provide the following operations:-
len(s)
Return the number of elements in set s (cardinality of s).
-
x in s
Test x for membership in s.
-
x not in s
Test x for non-membership in s.
-
isdisjoint
(other)¶ Return
True
if the set has no elements in common with other. Sets are disjoint if and only if their intersection is the empty set.New in version 2.6.
-
issubset
(other)¶ -
set <= other
Test whether every element in the set is in other.
-
set < other
Test whether the set is a proper subset of other, that is,
set <= other and set != other
.
-
issuperset
(other)¶ -
set >= other
Test whether every element in other is in the set.
-
set > other
Test whether the set is a proper superset of other, that is,
set >= other and set != other
.
-
union
(other, ...)¶ -
set | other | ...
Return a new set with elements from the set and all others.
Changed in version 2.6: Accepts multiple input iterables.
-
intersection
(other, ...)¶ -
set & other & ...
Return a new set with elements common to the set and all others.
Changed in version 2.6: Accepts multiple input iterables.
-
difference
(other, ...)¶ -
set - other - ...
Return a new set with elements in the set that are not in the others.
Changed in version 2.6: Accepts multiple input iterables.
-
symmetric_difference
(other)¶ -
set ^ other
Return a new set with elements in either the set or other but not both.
-
copy
()¶ Return a new set with a shallow copy of s.
Note, the non-operator versions of
union()
,intersection()
,difference()
, andsymmetric_difference()
,issubset()
, andissuperset()
methods will accept any iterable as an argument. In contrast, their operator based counterparts require their arguments to be sets. This precludes error-prone constructions likeset('abc') & 'cbs'
in favor of the more readableset('abc').intersection('cbs')
.Both
set
andfrozenset
support set to set comparisons. Two sets are equal if and only if every element of each set is contained in the other (each is a subset of the other). A set is less than another set if and only if the first set is a proper subset of the second set (is a subset, but is not equal). A set is greater than another set if and only if the first set is a proper superset of the second set (is a superset, but is not equal).Instances of
set
are compared to instances offrozenset
based on their members. For example,set('abc') == frozenset('abc')
returnsTrue
and so doesset('abc') in set([frozenset('abc')])
.The subset and equality comparisons do not generalize to a total ordering function. For example, any two non-empty disjoint sets are not equal and are not subsets of each other, so all of the following return
False
:a<b
,a==b
, ora>b
. Accordingly, sets do not implement the__cmp__()
method.Since sets only define partial ordering (subset relationships), the output of the
list.sort()
method is undefined for lists of sets.Set elements, like dictionary keys, must be hashable.
Binary operations that mix
set
instances withfrozenset
return the type of the first operand. For example:frozenset('ab') | set('bc')
returns an instance offrozenset
.The following table lists operations available for
set
that do not apply to immutable instances offrozenset
:-
update
(other, ...)¶ -
set |= other | ...
Update the set, adding elements from all others.
Changed in version 2.6: Accepts multiple input iterables.
-
intersection_update
(other, ...)¶ -
set &= other & ...
Update the set, keeping only elements found in it and all others.
Changed in version 2.6: Accepts multiple input iterables.
-
difference_update
(other, ...)¶ -
set -= other | ...
Update the set, removing elements found in others.
Changed in version 2.6: Accepts multiple input iterables.
-
symmetric_difference_update
(other)¶ -
set ^= other
Update the set, keeping only elements found in either set, but not in both.
-
add
(elem)¶ Add element elem to the set.
-
remove
(elem)¶ Remove element elem from the set. Raises
KeyError
if elem is not contained in the set.
-
discard
(elem)¶ Remove element elem from the set if it is present.
-
clear
()¶ Remove all elements from the set.
Note, the non-operator versions of the
update()
,intersection_update()
,difference_update()
, andsymmetric_difference_update()
methods will accept any iterable as an argument.Note, the elem argument to the
__contains__()
,remove()
, anddiscard()
methods may be a set. To support searching for an equivalent frozenset, the elem set is temporarily mutated during the search and then restored. During the search, the elem set should not be read or mutated since it does not have a meaningful value.-
See also
- Comparison to the built-in set types
- Differences between the
sets
module and the built-in set types.