blob: 7f4d534a700dae4bb9e2b93f7a11fd1f8f6bea35 [file] [log] [blame]
Georg Brandl54a3faa2008-01-20 09:30:57 +00001.. highlightlang:: c
2
3.. _setobjects:
4
5Set Objects
6-----------
7
8.. sectionauthor:: Raymond D. Hettinger <python@rcn.com>
9
10
11.. index::
12 object: set
13 object: frozenset
14
15This section details the public API for :class:`set` and :class:`frozenset`
16objects. Any functionality not listed below is best accessed using the either
Georg Brandl60203b42010-10-06 10:11:56 +000017the abstract object protocol (including :c:func:`PyObject_CallMethod`,
18:c:func:`PyObject_RichCompareBool`, :c:func:`PyObject_Hash`,
19:c:func:`PyObject_Repr`, :c:func:`PyObject_IsTrue`, :c:func:`PyObject_Print`, and
20:c:func:`PyObject_GetIter`) or the abstract number protocol (including
21:c:func:`PyNumber_And`, :c:func:`PyNumber_Subtract`, :c:func:`PyNumber_Or`,
22:c:func:`PyNumber_Xor`, :c:func:`PyNumber_InPlaceAnd`,
23:c:func:`PyNumber_InPlaceSubtract`, :c:func:`PyNumber_InPlaceOr`, and
24:c:func:`PyNumber_InPlaceXor`).
Georg Brandl54a3faa2008-01-20 09:30:57 +000025
26
Georg Brandl60203b42010-10-06 10:11:56 +000027.. c:type:: PySetObject
Georg Brandl54a3faa2008-01-20 09:30:57 +000028
Georg Brandl60203b42010-10-06 10:11:56 +000029 This subtype of :c:type:`PyObject` is used to hold the internal data for both
30 :class:`set` and :class:`frozenset` objects. It is like a :c:type:`PyDictObject`
Georg Brandl54a3faa2008-01-20 09:30:57 +000031 in that it is a fixed size for small sets (much like tuple storage) and will
32 point to a separate, variable sized block of memory for medium and large sized
33 sets (much like list storage). None of the fields of this structure should be
34 considered public and are subject to change. All access should be done through
35 the documented API rather than by manipulating the values in the structure.
36
37
Georg Brandl60203b42010-10-06 10:11:56 +000038.. c:var:: PyTypeObject PySet_Type
Georg Brandl54a3faa2008-01-20 09:30:57 +000039
Georg Brandl60203b42010-10-06 10:11:56 +000040 This is an instance of :c:type:`PyTypeObject` representing the Python
Georg Brandl54a3faa2008-01-20 09:30:57 +000041 :class:`set` type.
42
43
Georg Brandl60203b42010-10-06 10:11:56 +000044.. c:var:: PyTypeObject PyFrozenSet_Type
Georg Brandl54a3faa2008-01-20 09:30:57 +000045
Georg Brandl60203b42010-10-06 10:11:56 +000046 This is an instance of :c:type:`PyTypeObject` representing the Python
Georg Brandl54a3faa2008-01-20 09:30:57 +000047 :class:`frozenset` type.
48
49The following type check macros work on pointers to any Python object. Likewise,
50the constructor functions work with any iterable Python object.
51
52
Georg Brandl60203b42010-10-06 10:11:56 +000053.. c:function:: int PySet_Check(PyObject *p)
Christian Heimesfd66e512008-01-29 12:18:50 +000054
55 Return true if *p* is a :class:`set` object or an instance of a subtype.
56
Georg Brandl60203b42010-10-06 10:11:56 +000057.. c:function:: int PyFrozenSet_Check(PyObject *p)
Christian Heimes15ebc882008-02-04 18:48:49 +000058
59 Return true if *p* is a :class:`frozenset` object or an instance of a
60 subtype.
61
Georg Brandl60203b42010-10-06 10:11:56 +000062.. c:function:: int PyAnySet_Check(PyObject *p)
Georg Brandl54a3faa2008-01-20 09:30:57 +000063
64 Return true if *p* is a :class:`set` object, a :class:`frozenset` object, or an
65 instance of a subtype.
66
67
Georg Brandl60203b42010-10-06 10:11:56 +000068.. c:function:: int PyAnySet_CheckExact(PyObject *p)
Georg Brandl54a3faa2008-01-20 09:30:57 +000069
70 Return true if *p* is a :class:`set` object or a :class:`frozenset` object but
71 not an instance of a subtype.
72
73
Georg Brandl60203b42010-10-06 10:11:56 +000074.. c:function:: int PyFrozenSet_CheckExact(PyObject *p)
Georg Brandl54a3faa2008-01-20 09:30:57 +000075
76 Return true if *p* is a :class:`frozenset` object but not an instance of a
77 subtype.
78
79
Georg Brandl60203b42010-10-06 10:11:56 +000080.. c:function:: PyObject* PySet_New(PyObject *iterable)
Georg Brandl54a3faa2008-01-20 09:30:57 +000081
82 Return a new :class:`set` containing objects returned by the *iterable*. The
83 *iterable* may be *NULL* to create a new empty set. Return the new set on
84 success or *NULL* on failure. Raise :exc:`TypeError` if *iterable* is not
85 actually iterable. The constructor is also useful for copying a set
86 (``c=set(s)``).
87
88
Georg Brandl60203b42010-10-06 10:11:56 +000089.. c:function:: PyObject* PyFrozenSet_New(PyObject *iterable)
Georg Brandl54a3faa2008-01-20 09:30:57 +000090
91 Return a new :class:`frozenset` containing objects returned by the *iterable*.
92 The *iterable* may be *NULL* to create a new empty frozenset. Return the new
93 set on success or *NULL* on failure. Raise :exc:`TypeError` if *iterable* is
94 not actually iterable.
95
Christian Heimesfd66e512008-01-29 12:18:50 +000096
Georg Brandl54a3faa2008-01-20 09:30:57 +000097The following functions and macros are available for instances of :class:`set`
98or :class:`frozenset` or instances of their subtypes.
99
100
Georg Brandl60203b42010-10-06 10:11:56 +0000101.. c:function:: Py_ssize_t PySet_Size(PyObject *anyset)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000102
103 .. index:: builtin: len
104
105 Return the length of a :class:`set` or :class:`frozenset` object. Equivalent to
106 ``len(anyset)``. Raises a :exc:`PyExc_SystemError` if *anyset* is not a
107 :class:`set`, :class:`frozenset`, or an instance of a subtype.
108
109
Georg Brandl60203b42010-10-06 10:11:56 +0000110.. c:function:: Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000111
Georg Brandl60203b42010-10-06 10:11:56 +0000112 Macro form of :c:func:`PySet_Size` without error checking.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000113
114
Georg Brandl60203b42010-10-06 10:11:56 +0000115.. c:function:: int PySet_Contains(PyObject *anyset, PyObject *key)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000116
117 Return 1 if found, 0 if not found, and -1 if an error is encountered. Unlike
118 the Python :meth:`__contains__` method, this function does not automatically
119 convert unhashable sets into temporary frozensets. Raise a :exc:`TypeError` if
120 the *key* is unhashable. Raise :exc:`PyExc_SystemError` if *anyset* is not a
121 :class:`set`, :class:`frozenset`, or an instance of a subtype.
122
Georg Brandl54a3faa2008-01-20 09:30:57 +0000123
Georg Brandl60203b42010-10-06 10:11:56 +0000124.. c:function:: int PySet_Add(PyObject *set, PyObject *key)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000125
Georg Brandle6bcc912008-05-12 18:05:20 +0000126 Add *key* to a :class:`set` instance. Also works with :class:`frozenset`
Georg Brandl60203b42010-10-06 10:11:56 +0000127 instances (like :c:func:`PyTuple_SetItem` it can be used to fill-in the values
Georg Brandle6bcc912008-05-12 18:05:20 +0000128 of brand new frozensets before they are exposed to other code). Return 0 on
129 success or -1 on failure. Raise a :exc:`TypeError` if the *key* is
130 unhashable. Raise a :exc:`MemoryError` if there is no room to grow. Raise a
131 :exc:`SystemError` if *set* is an not an instance of :class:`set` or its
Georg Brandl54a3faa2008-01-20 09:30:57 +0000132 subtype.
133
Christian Heimesfd66e512008-01-29 12:18:50 +0000134
135The following functions are available for instances of :class:`set` or its
136subtypes but not for instances of :class:`frozenset` or its subtypes.
137
Georg Brandl54a3faa2008-01-20 09:30:57 +0000138
Georg Brandl60203b42010-10-06 10:11:56 +0000139.. c:function:: int PySet_Discard(PyObject *set, PyObject *key)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000140
141 Return 1 if found and removed, 0 if not found (no action taken), and -1 if an
142 error is encountered. Does not raise :exc:`KeyError` for missing keys. Raise a
Serhiy Storchaka0b68a2d2013-10-09 13:26:17 +0300143 :exc:`TypeError` if the *key* is unhashable. Unlike the Python :meth:`~set.discard`
Georg Brandl54a3faa2008-01-20 09:30:57 +0000144 method, this function does not automatically convert unhashable sets into
145 temporary frozensets. Raise :exc:`PyExc_SystemError` if *set* is an not an
146 instance of :class:`set` or its subtype.
147
148
Georg Brandl60203b42010-10-06 10:11:56 +0000149.. c:function:: PyObject* PySet_Pop(PyObject *set)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000150
151 Return a new reference to an arbitrary object in the *set*, and removes the
152 object from the *set*. Return *NULL* on failure. Raise :exc:`KeyError` if the
153 set is empty. Raise a :exc:`SystemError` if *set* is an not an instance of
154 :class:`set` or its subtype.
155
156
Georg Brandl60203b42010-10-06 10:11:56 +0000157.. c:function:: int PySet_Clear(PyObject *set)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000158
159 Empty an existing set of all elements.
Antoine Pitrou093ce9c2011-12-16 11:24:27 +0100160
161
162.. c:function:: int PySet_ClearFreeList()
163
164 Clear the free list. Return the total number of freed items.
165
166 .. versionadded:: 3.3