blob: 258530b1957cac3b64af5cc462af7af5cd44b87c [file] [log] [blame]
Georg Brandlf6842722008-01-19 22:08:21 +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
15.. versionadded:: 2.5
16
17This section details the public API for :class:`set` and :class:`frozenset`
18objects. Any functionality not listed below is best accessed using the either
Sandro Tosi98ed08f2012-01-14 16:42:02 +010019the abstract object protocol (including :c:func:`PyObject_CallMethod`,
20:c:func:`PyObject_RichCompareBool`, :c:func:`PyObject_Hash`,
21:c:func:`PyObject_Repr`, :c:func:`PyObject_IsTrue`, :c:func:`PyObject_Print`, and
22:c:func:`PyObject_GetIter`) or the abstract number protocol (including
23:c:func:`PyNumber_And`, :c:func:`PyNumber_Subtract`, :c:func:`PyNumber_Or`,
24:c:func:`PyNumber_Xor`, :c:func:`PyNumber_InPlaceAnd`,
25:c:func:`PyNumber_InPlaceSubtract`, :c:func:`PyNumber_InPlaceOr`, and
26:c:func:`PyNumber_InPlaceXor`).
Georg Brandlf6842722008-01-19 22:08:21 +000027
28
Sandro Tosi98ed08f2012-01-14 16:42:02 +010029.. c:type:: PySetObject
Georg Brandlf6842722008-01-19 22:08:21 +000030
Sandro Tosi98ed08f2012-01-14 16:42:02 +010031 This subtype of :c:type:`PyObject` is used to hold the internal data for both
32 :class:`set` and :class:`frozenset` objects. It is like a :c:type:`PyDictObject`
Georg Brandlf6842722008-01-19 22:08:21 +000033 in that it is a fixed size for small sets (much like tuple storage) and will
34 point to a separate, variable sized block of memory for medium and large sized
35 sets (much like list storage). None of the fields of this structure should be
36 considered public and are subject to change. All access should be done through
37 the documented API rather than by manipulating the values in the structure.
38
39
Sandro Tosi98ed08f2012-01-14 16:42:02 +010040.. c:var:: PyTypeObject PySet_Type
Georg Brandlf6842722008-01-19 22:08:21 +000041
Sandro Tosi98ed08f2012-01-14 16:42:02 +010042 This is an instance of :c:type:`PyTypeObject` representing the Python
Georg Brandlf6842722008-01-19 22:08:21 +000043 :class:`set` type.
44
45
Sandro Tosi98ed08f2012-01-14 16:42:02 +010046.. c:var:: PyTypeObject PyFrozenSet_Type
Georg Brandlf6842722008-01-19 22:08:21 +000047
Sandro Tosi98ed08f2012-01-14 16:42:02 +010048 This is an instance of :c:type:`PyTypeObject` representing the Python
Georg Brandlf6842722008-01-19 22:08:21 +000049 :class:`frozenset` type.
50
51The following type check macros work on pointers to any Python object. Likewise,
52the constructor functions work with any iterable Python object.
53
54
Sandro Tosi98ed08f2012-01-14 16:42:02 +010055.. c:function:: int PySet_Check(PyObject *p)
Raymond Hettingere84ada32008-01-28 21:48:07 +000056
57 Return true if *p* is a :class:`set` object or an instance of a subtype.
58
59 .. versionadded:: 2.6
60
Sandro Tosi98ed08f2012-01-14 16:42:02 +010061.. c:function:: int PyFrozenSet_Check(PyObject *p)
Amaury Forgeot d'Arccab3d982008-02-03 22:51:43 +000062
63 Return true if *p* is a :class:`frozenset` object or an instance of a
64 subtype.
65
66 .. versionadded:: 2.6
67
Sandro Tosi98ed08f2012-01-14 16:42:02 +010068.. c:function:: int PyAnySet_Check(PyObject *p)
Georg Brandlf6842722008-01-19 22:08:21 +000069
70 Return true if *p* is a :class:`set` object, a :class:`frozenset` object, or an
71 instance of a subtype.
72
73
Sandro Tosi98ed08f2012-01-14 16:42:02 +010074.. c:function:: int PyAnySet_CheckExact(PyObject *p)
Georg Brandlf6842722008-01-19 22:08:21 +000075
76 Return true if *p* is a :class:`set` object or a :class:`frozenset` object but
77 not an instance of a subtype.
78
79
Sandro Tosi98ed08f2012-01-14 16:42:02 +010080.. c:function:: int PyFrozenSet_CheckExact(PyObject *p)
Georg Brandlf6842722008-01-19 22:08:21 +000081
82 Return true if *p* is a :class:`frozenset` object but not an instance of a
83 subtype.
84
85
Sandro Tosi98ed08f2012-01-14 16:42:02 +010086.. c:function:: PyObject* PySet_New(PyObject *iterable)
Georg Brandlf6842722008-01-19 22:08:21 +000087
88 Return a new :class:`set` containing objects returned by the *iterable*. The
89 *iterable* may be *NULL* to create a new empty set. Return the new set on
90 success or *NULL* on failure. Raise :exc:`TypeError` if *iterable* is not
91 actually iterable. The constructor is also useful for copying a set
92 (``c=set(s)``).
93
94
Sandro Tosi98ed08f2012-01-14 16:42:02 +010095.. c:function:: PyObject* PyFrozenSet_New(PyObject *iterable)
Georg Brandlf6842722008-01-19 22:08:21 +000096
97 Return a new :class:`frozenset` containing objects returned by the *iterable*.
98 The *iterable* may be *NULL* to create a new empty frozenset. Return the new
99 set on success or *NULL* on failure. Raise :exc:`TypeError` if *iterable* is
100 not actually iterable.
101
Raymond Hettingerecdcb582008-01-28 20:34:33 +0000102 .. versionchanged:: 2.6
103 Now guaranteed to return a brand-new :class:`frozenset`. Formerly,
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000104 frozensets of zero-length were a singleton. This got in the way of
Raymond Hettingerecdcb582008-01-28 20:34:33 +0000105 building-up new frozensets with :meth:`PySet_Add`.
106
Georg Brandlf6842722008-01-19 22:08:21 +0000107The following functions and macros are available for instances of :class:`set`
108or :class:`frozenset` or instances of their subtypes.
109
110
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100111.. c:function:: Py_ssize_t PySet_Size(PyObject *anyset)
Georg Brandlf6842722008-01-19 22:08:21 +0000112
113 .. index:: builtin: len
114
115 Return the length of a :class:`set` or :class:`frozenset` object. Equivalent to
116 ``len(anyset)``. Raises a :exc:`PyExc_SystemError` if *anyset* is not a
117 :class:`set`, :class:`frozenset`, or an instance of a subtype.
118
Jeroen Ruigrok van der Werven089c5cd2009-04-25 17:59:03 +0000119 .. versionchanged:: 2.5
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100120 This function returned an :c:type:`int`. This might require changes in
Jeroen Ruigrok van der Werven089c5cd2009-04-25 17:59:03 +0000121 your code for properly supporting 64-bit systems.
122
Georg Brandlf6842722008-01-19 22:08:21 +0000123
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100124.. c:function:: Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
Georg Brandlf6842722008-01-19 22:08:21 +0000125
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100126 Macro form of :c:func:`PySet_Size` without error checking.
Georg Brandlf6842722008-01-19 22:08:21 +0000127
128
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100129.. c:function:: int PySet_Contains(PyObject *anyset, PyObject *key)
Georg Brandlf6842722008-01-19 22:08:21 +0000130
131 Return 1 if found, 0 if not found, and -1 if an error is encountered. Unlike
132 the Python :meth:`__contains__` method, this function does not automatically
133 convert unhashable sets into temporary frozensets. Raise a :exc:`TypeError` if
134 the *key* is unhashable. Raise :exc:`PyExc_SystemError` if *anyset* is not a
135 :class:`set`, :class:`frozenset`, or an instance of a subtype.
136
Georg Brandlf6842722008-01-19 22:08:21 +0000137
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100138.. c:function:: int PySet_Add(PyObject *set, PyObject *key)
Georg Brandlf6842722008-01-19 22:08:21 +0000139
140 Add *key* to a :class:`set` instance. Does not apply to :class:`frozenset`
141 instances. Return 0 on success or -1 on failure. Raise a :exc:`TypeError` if
142 the *key* is unhashable. Raise a :exc:`MemoryError` if there is no room to grow.
143 Raise a :exc:`SystemError` if *set* is an not an instance of :class:`set` or its
144 subtype.
145
Raymond Hettingerecdcb582008-01-28 20:34:33 +0000146 .. versionchanged:: 2.6
147 Now works with instances of :class:`frozenset` or its subtypes.
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100148 Like :c:func:`PyTuple_SetItem` in that it can be used to fill-in the
Raymond Hettingerecdcb582008-01-28 20:34:33 +0000149 values of brand new frozensets before they are exposed to other code.
150
151The following functions are available for instances of :class:`set` or its
152subtypes but not for instances of :class:`frozenset` or its subtypes.
153
Georg Brandlf6842722008-01-19 22:08:21 +0000154
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100155.. c:function:: int PySet_Discard(PyObject *set, PyObject *key)
Georg Brandlf6842722008-01-19 22:08:21 +0000156
157 Return 1 if found and removed, 0 if not found (no action taken), and -1 if an
158 error is encountered. Does not raise :exc:`KeyError` for missing keys. Raise a
Serhiy Storchaka99a196f2013-10-09 13:25:21 +0300159 :exc:`TypeError` if the *key* is unhashable. Unlike the Python :meth:`~set.discard`
Georg Brandlf6842722008-01-19 22:08:21 +0000160 method, this function does not automatically convert unhashable sets into
161 temporary frozensets. Raise :exc:`PyExc_SystemError` if *set* is an not an
162 instance of :class:`set` or its subtype.
163
164
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100165.. c:function:: PyObject* PySet_Pop(PyObject *set)
Georg Brandlf6842722008-01-19 22:08:21 +0000166
167 Return a new reference to an arbitrary object in the *set*, and removes the
168 object from the *set*. Return *NULL* on failure. Raise :exc:`KeyError` if the
169 set is empty. Raise a :exc:`SystemError` if *set* is an not an instance of
170 :class:`set` or its subtype.
171
172
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100173.. c:function:: int PySet_Clear(PyObject *set)
Georg Brandlf6842722008-01-19 22:08:21 +0000174
175 Empty an existing set of all elements.