Raymond, thanks for the note. > You can create a frozenset from any iterable using PyFrozenSet_New(). > > If you don't have an iterable and want to build-up the frozenset one element > at a time, the approach is to create a regular set (or some other mutable > container), add to it, then convert it to a frozenset when you're done: > > s = PySet_New(NULL); > PySet_Add(s, obj1); > PySet_Add(s, obj2); > PySet_Add(s, obj3); > f = PyFrozenSet_New(s); > Py_DECREF(s);
This is essentially the same thing I mentioned, except using a set instead of a list as the iterable. I'm just a tad annoyed at the fact that I know at set creation time exactly how many elements it's going to have, and this procedure strikes me as a somewhat inefficient way to create that set. Just tickles my "C inefficiency" funnybone a bit :-). > The API you propose doesn't work because sets and frozensets are not > indexed like tuples and lists. Accordingly, sets and frozensets have > a C API that is more like dictionaries. Since dictionaries are not > indexable, they also cannot have an API like the one you propose: > > PyDict_NEW(int) => PySetObject * > PyDict_SET_ITEM(s, index, key, value) Didn't really mean to propose "PyDict_SET_ITEM(s, index, key, value)", should have been PyDict_SET_ITEM(s, index, value) But your point is still well taken. How about this one, though: PyDict_NEW(int) => PySetObject * PyDict_ADD(s, value) ADD would just stick value in the next empty slot (and steal its reference). Bill _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com