设置对象 — Python 文档
来自菜鸟教程
Python/docs/3.8/c-api/set
设置对象
本节详细介绍了 set 和 frozenset 对象的公共 API。 下面未列出的任何功能最好使用抽象对象协议(包括 PyObject_CallMethod()、PyObject_RichCompareBool()、PyObject_Hash()、 PyObject_Repr()、PyObject_IsTrue()、PyObject_Print()和PyObject_GetIter())或抽象数协议(包括PyObject_Print()和) )、PyNumber_Subtract()、PyNumber_Or()、PyNumber_Xor()、PyNumber_InPlaceAnd()、PyNumber_Or() )、PyNumber_InPlaceOr() 和 PyNumber_InPlaceXor())。
- type PySetObject
- PyObject 的这个子类型用于保存 set 和 frozenset 对象的内部数据。 它就像一个 PyDictObject,因为它是小集合的固定大小(很像元组存储),并且将指向一个单独的、可变大小的内存块用于中型和大型集(很像列表存储) )。 此结构的任何字段都不应被视为公共字段,并且可能会发生变化。 所有访问都应该通过文档化的 API 来完成,而不是通过操作结构中的值来完成。
- PyTypeObject PySet_Type
- 这是一个 PyTypeObject 的实例,代表 Python set 类型。
- PyTypeObject PyFrozenSet_Type
- 这是一个 PyTypeObject 的实例,代表 Python frozenset 类型。
以下类型检查宏适用于指向任何 Python 对象的指针。 同样,构造函数可用于任何可迭代的 Python 对象。
- int PySet_Check(PyObject *p)
- 如果 p 是 set 对象或子类型的实例,则返回 true。
- int PyFrozenSet_Check(PyObject *p)
- 如果 p 是 frozenset 对象或子类型的实例,则返回 true。
- int PyAnySet_Check(PyObject *p)
- int PyAnySet_CheckExact(PyObject *p)
- int PyFrozenSet_CheckExact(PyObject *p)
- 如果 p 是 frozenset 对象但不是子类型的实例,则返回 true。
- 返回一个新的 set,其中包含由 iterable 返回的对象。 iterable 可以是
NULL
来创建一个新的空集。 成功时返回新集合,失败时返回NULL
。 如果 iterable 实际上不是可迭代的,则提高 TypeError。 构造函数也可用于复制集合 (c=set(s)
)。
- 返回一个新的 frozenset,其中包含由 iterable 返回的对象。 iterable 可以是
NULL
来创建一个新的空冻结集。 成功时返回新集合,失败时返回NULL
。 如果 iterable 实际上不是可迭代的,则提高 TypeError。
以下函数和宏可用于 set 或 frozenset 的实例或其子类型的实例。
- Py_ssize_t PySet_Size(PyObject *anyset)
- 返回 set 或 frozenset 对象的长度。 相当于
len(anyset)
。 如果 anyset 不是 set、frozenset 或子类型的实例,则引发PyExc_SystemError
。
- Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
- PySet_Size() 没有错误检查的宏形式。
- 如果找到则返回
1
,如果未找到则返回0
,如果遇到错误则返回-1
。 与 Python__contains__()
方法不同,此函数不会自动将不可散列集转换为临时冻结集。 如果 键 不可散列,则引发 TypeError。 如果 anyset 不是 set、frozenset 或子类型的实例,则提高PyExc_SystemError
。
- 将 key 添加到 set 实例。 也适用于 frozenset 实例(如 PyTuple_SetItem() 它可用于在暴露给其他代码之前填充全新的frozensets的值)。 成功时返回
0
,失败时返回-1
。 如果 键 不可散列,则引发 TypeError。 如果没有增长空间,则引发 MemoryError。 如果 set 不是 set 或其子类型的实例,则引发 SystemError。
以下函数可用于 set 或其子类型的实例,但不适用于 frozenset 或其子类型的实例。
- 如果找到并删除,则返回
1
,如果未找到(未采取任何操作),则返回0
,如果遇到错误,则返回-1
。 不会为丢失的键引发 KeyError。 如果 键 不可散列,则引发 TypeError。 与 Pythondiscard()
方法不同,此函数不会自动将不可散列集转换为临时冻结集。 如果 set 不是 set 或其子类型的实例,则提高PyExc_SystemError
。
- 返回对 set 中任意对象的新引用,并从 set 中删除该对象。 失败时返回
NULL
。 如果集合为空,则引发 KeyError。 如果 set 不是 set 或其子类型的实例,则引发 SystemError。
- int PySet_Clear(PyObject *set)
- 清空所有元素的现有集合。
- int PySet_ClearFreeList()
清除空闲列表。 返回已释放项目的总数。
3.3 版中的新功能。