Αντικείμενα Set
***************

Αυτή η ενότητα περιγράφει το δημόσιο API για τα αντικείμενα "set" και
"frozenset". Οποιαδήποτε λειτουργικότητα δεν αναφέρεται παρακάτω είναι
προτιμότερο να προσπελαστεί είτε μέσω του αφαιρετικού πρωτοκόλλου
αντικειμένων (συμπεριλαμβανομένων των "PyObject_CallMethod()",
"PyObject_RichCompareBool()", "PyObject_Hash()", "PyObject_Repr()",
"PyObject_IsTrue()", "PyObject_Print()" και "PyObject_GetIter()") είτε
μέσω του αφαιρετικού αριθμητικού πρωτοκόλλου (συμπεριλαμβανομένων των
"PyNumber_And()", "PyNumber_Subtract()", "PyNumber_Or()",
"PyNumber_Xor()", "PyNumber_InPlaceAnd()",
"PyNumber_InPlaceSubtract()", "PyNumber_InPlaceOr()" και
"PyNumber_InPlaceXor()").

type PySetObject

   Αυτός ο υποτύπος του "PyObject" χρησιμοποιείται για την αποθήκευση
   των εσωτερικών δεδομένων τόσο για τα αντικείμενα "set" όσο και για
   τα αντικείμενα "frozenset". Μοιάζει με το "PyDictObject" στο ότι
   έχει σταθερό μέγεθος για μικρά set (παρόμοια με την αποθήκευση
   tuple) και δείχνει σε ένα ξεχωριστό, μεταβλητού μεγέθους μπλοκ
   μνήμης για μεσαία και μεγάλα set (παρόμοια με την αποθήκευση list).
   Κανένα από τα πεδία αυτής της δομής δεν θεωρείται δημόσιο και όλα
   υπόκεινται σε αλλαγές. Κάθε πρόσβαση πρέπει να γίνεται μέσω του
   τεκμηριωμένου API και όχι μέσω απευθείας τροποποίησης των τιμών της
   δομής.

PyTypeObject PySet_Type
    * Μέρος του Σταθερό ABI.*

   Αυτό είναι ένα στιγμιότυπο του "PyTypeObject" που αντιπροσωπεύει
   τον τύπο "set" της Python.

PyTypeObject PyFrozenSet_Type
    * Μέρος του Σταθερό ABI.*

   Αυτό είναι ένα στιγμιότυπο του "PyTypeObject" που αντιπροσωπεύει
   τον τύπο "frozenset" της Python.

Οι παρακάτω μακροεντολές ελέγχου τύπου λειτουργούν σε δείκτες προς
οποιοδήποτε αντικείμενο Python. Ομοίως, οι συναρτήσεις constructor
λειτουργούν με οποιοδήποτε επαναλήψιμο αντικείμενο Python.

int PySet_Check(PyObject *p)

   Επιστρέφει true αν το *p* είναι αντικείμενο "set" ή στιγμιότυπο
   υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

int PyFrozenSet_Check(PyObject *p)

   Επιστρέφει true αν το *p* είναι αντικείμενο "frozenset" ή
   στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

int PyAnySet_Check(PyObject *p)

   Επιστρέφει true αν το *p* είναι αντικείμενο "set", αντικείμενο
   "frozenset" ή στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει
   πάντα.

int PySet_CheckExact(PyObject *p)

   Επιστρέφει true αν το *p* είναι αντικείμενο "set" αλλά όχι
   στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

   Added in version 3.10.

int PyAnySet_CheckExact(PyObject *p)

   Επιστρέφει true αν το *p* είναι αντικείμενο "set" ή αντικείμενο
   "frozenset", αλλά όχι στιγμιότυπο υποτύπου. Η συνάρτηση αυτή
   επιτυγχάνει πάντα.

int PyFrozenSet_CheckExact(PyObject *p)

   Επιστρέφει true αν το *p* είναι αντικείμενο "frozenset", αλλά όχι
   στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

PyObject *PySet_New(PyObject *iterable)
    *Επιστρεφόμενη τιμή: New reference.** Μέρος του Σταθερό ABI.**
   Thread safety: Safe for concurrent use on the same object.*

   Επιστρέφει ένα νέο "set", το οποίο περιέχει αντικείμενα που
   επιστρέφονται από το *iterable*. Το *iterable* μπορεί να είναι
   "NULL" για τη δημιουργία νέου κενού set. Επιστρέφει το νέο set σε
   περίπτωση επιτυχίας ή "NULL" σε περίπτωση αποτυχίας. Εγείρει
   "TypeError" αν το *iterable* δεν είναι στην πραγματικότητα
   επαναλήψιμο. Ο constructor είναι επίσης χρήσιμος για την αντιγραφή
   ενός set ("c=set(s)").

   Σημείωση:

     The operation is atomic on *free threading* when *iterable* is a
     "set", "frozenset", "dict" or "frozendict".

PyObject *PyFrozenSet_New(PyObject *iterable)
    *Επιστρεφόμενη τιμή: New reference.** Μέρος του Σταθερό ABI.**
   Thread safety: Safe for concurrent use on the same object.*

   Επιστρέφει ένα νέο "frozenset", το οποίο περιέχει αντικείμενα που
   επιστρέφει το *iterable*. Το *iterable* μπορεί να είναι "NULL" για
   τη δημιουργία νέου κενού frozenset. Επιστρέφει το νέο set σε
   περίπτωση επιτυχίας ή "NULL" σε περίπτωση αποτυχίας. Εγείρει
   "TypeError", αν το *iterable* δεν είναι στην πραγματικότητα
   επαναλήψιμο.

   Σημείωση:

     The operation is atomic on *free threading* when *iterable* is a
     "set", "frozenset", "dict" or "frozendict".

Οι παρακάτω συναρτήσεις και μακροεντολές είναι διαθέσιμες για
στιγμιότυπα των "set" ή "frozenset" ή στιγμιότυπα των υποτύπων τους.

Py_ssize_t PySet_Size(PyObject *anyset)
    * Μέρος του Σταθερό ABI.** Thread safety: Atomic.*

   Επιστρέφει το μήκος ενός αντικειμένου "set" ή "frozenset".
   Ισοδυναμεί με το "len(anyset)". Εγείρει "SystemError" αν το
   *anyset* δεν είναι "set", "frozenset" ή στιγμιότυπο υποτύπου.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
    * Thread safety: Atomic.*

   Μορφή μακροεντολής της "PySet_Size()" χωρίς έλεγχο σφαλμάτων.

int PySet_Contains(PyObject *anyset, PyObject *key)
    * Μέρος του Σταθερό ABI.** Thread safety: Safe for concurrent use
   on the same object.*

   Επιστρέφει "1" αν βρεθεί, "0" αν δεν βρεθεί και "-1" αν προκύψει
   σφάλμα. Σε αντίθεση με τη μέθοδο "__contains__()" της Python, αυτή
   η συνάρτηση δεν μετατρέπει αυτόματα μη κατακερματίσιμα set σε
   προσωρινά frozenset. Εγείρει "TypeError", αν το *key* είναι μη
   κατακερματίσιμο. Εγείρει "SystemError", αν το *anyset* δεν είναι
   "set", "frozenset" ή στιγμιότυπο υποτύπου.

   Σημείωση:

     The operation is atomic on *free threading* when *key* is "str",
     "int", "float", "bool" or "bytes".

int PySet_Add(PyObject *set, PyObject *key)
    * Μέρος του Σταθερό ABI.** Thread safety: Safe for concurrent use
   on the same object.*

   Προσθέτει το *key* σε ένα στιγμιότυπο "set". Λειτουργεί επίσης με
   στιγμιότυπα "frozenset" (όπως η "PyTuple_SetItem()", μπορεί να
   χρησιμοποιηθεί για τη συμπλήρωση των τιμών ολοκαίνουριων frozenset
   πριν  εκτεθούν σε άλλο κώδικα). Επιστρέφει "0" σε περίπτωση
   επιτυχίας ή "-1" σε περίπτωση αποτυχίας. Εγείρει "TypeError", αν το
   *key* είναι μη κατακερματίσιμο. Εγείρει "MemoryError", αν δεν
   υπάρχει χώρος για επέκταση. Εγείρει "SystemError", αν το *set* δεν
   είναι στιγμιότυπο του "set" ή υποτύπου του.

   Σημείωση:

     The operation is atomic on *free threading* when *key* is "str",
     "int", "float", "bool" or "bytes".

Οι παρακάτω συναρτήσεις είναι διαθέσιμες για στιγμιότυπα του "set" ή
των υποτύπων του, αλλά όχι για στιγμιότυπα του "frozenset" ή των
υποτύπων του.

int PySet_Discard(PyObject *set, PyObject *key)
    * Μέρος του Σταθερό ABI.** Thread safety: Safe for concurrent use
   on the same object.*

   Return "1" if found and removed, "0" if not found (no action
   taken), and "-1" if an error is encountered.  Does not raise
   "KeyError" for missing keys.  Raise a "TypeError" if the *key* is
   unhashable.  Unlike the Python "discard()" method, this function
   does not automatically convert unhashable sets into temporary
   frozensets. Raise "SystemError" if *set* is not an instance of
   "set" or its subtype.

   Σημείωση:

     The operation is atomic on *free threading* when *key* is "str",
     "int", "float", "bool" or "bytes".

PyObject *PySet_Pop(PyObject *set)
    *Επιστρεφόμενη τιμή: New reference.** Μέρος του Σταθερό ABI.**
   Thread safety: Atomic.*

   Επιστρέφει μια νέα αναφορά σε ένα τυχαίο αντικείμενο του *set* και
   αφαιρεί το αντικείμενο από το *set*. Επιστρέφει "NULL" σε περίπτωση
   αποτυχίας. Εγείρει "KeyError", αν το set είναι κενό. Εγείρει
   "SystemError" αν το *set* δεν είναι στιγμιότυπο του "set" ή
   υποτύπου του.

int PySet_Clear(PyObject *set)
    * Μέρος του Σταθερό ABI.** Thread safety: Atomic.*

   Αδειάζει ένα υπάρχον set από όλα τα στοιχεία του. Επιστρέφει "0" σε
   περίπτωση επιτυχίας. Επιστρέφει "-1" και εγείρει "SystemError", αν
   το *set* δεν είναι στιγμιότυπο του "set" ή υποτύπου του.

   Σημείωση:

     In the *free-threaded build*, the set is emptied before its
     entries are cleared, so other threads will observe an empty set
     rather than intermediate states.


Deprecated API
==============

PySet_MINSIZE

   A constant representing the size of an internal preallocated table
   inside "PySetObject" instances.

   This is documented solely for completeness, as there are no
   guarantees that a given version of CPython uses preallocated tables
   with a fixed size. In code that does not deal with unstable set
   internals, "PySet_MINSIZE" can be replaced with a small constant
   like "8".

   If looking for the size of a set, use "PySet_Size()" instead.

   Soft deprecated since version 3.14.
