1.. 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 17the 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`). 25 26 27.. c:type:: PySetObject 28 29 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` 31 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 38.. c:var:: PyTypeObject PySet_Type 39 40 This is an instance of :c:type:`PyTypeObject` representing the Python 41 :class:`set` type. 42 43 44.. c:var:: PyTypeObject PyFrozenSet_Type 45 46 This is an instance of :c:type:`PyTypeObject` representing the Python 47 :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 53.. c:function:: int PySet_Check(PyObject *p) 54 55 Return true if *p* is a :class:`set` object or an instance of a subtype. 56 57.. c:function:: int PyFrozenSet_Check(PyObject *p) 58 59 Return true if *p* is a :class:`frozenset` object or an instance of a 60 subtype. 61 62.. c:function:: int PyAnySet_Check(PyObject *p) 63 64 Return true if *p* is a :class:`set` object, a :class:`frozenset` object, or an 65 instance of a subtype. 66 67 68.. c:function:: int PyAnySet_CheckExact(PyObject *p) 69 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 74.. c:function:: int PyFrozenSet_CheckExact(PyObject *p) 75 76 Return true if *p* is a :class:`frozenset` object but not an instance of a 77 subtype. 78 79 80.. c:function:: PyObject* PySet_New(PyObject *iterable) 81 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 89.. c:function:: PyObject* PyFrozenSet_New(PyObject *iterable) 90 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 96 97The following functions and macros are available for instances of :class:`set` 98or :class:`frozenset` or instances of their subtypes. 99 100 101.. c:function:: Py_ssize_t PySet_Size(PyObject *anyset) 102 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 110.. c:function:: Py_ssize_t PySet_GET_SIZE(PyObject *anyset) 111 112 Macro form of :c:func:`PySet_Size` without error checking. 113 114 115.. c:function:: int PySet_Contains(PyObject *anyset, PyObject *key) 116 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 123 124.. c:function:: int PySet_Add(PyObject *set, PyObject *key) 125 126 Add *key* to a :class:`set` instance. Also works with :class:`frozenset` 127 instances (like :c:func:`PyTuple_SetItem` it can be used to fill-in the values 128 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 not an instance of :class:`set` or its 132 subtype. 133 134 135The following functions are available for instances of :class:`set` or its 136subtypes but not for instances of :class:`frozenset` or its subtypes. 137 138 139.. c:function:: int PySet_Discard(PyObject *set, PyObject *key) 140 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 143 :exc:`TypeError` if the *key* is unhashable. Unlike the Python :meth:`~set.discard` 144 method, this function does not automatically convert unhashable sets into 145 temporary frozensets. Raise :exc:`PyExc_SystemError` if *set* is not an 146 instance of :class:`set` or its subtype. 147 148 149.. c:function:: PyObject* PySet_Pop(PyObject *set) 150 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 not an instance of 154 :class:`set` or its subtype. 155 156 157.. c:function:: int PySet_Clear(PyObject *set) 158 159 Empty an existing set of all elements. 160 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 167