[Python-ideas] universal set object for use in set manipulation
Georg Brandl
g.brandl at gmx.net
Thu Jul 23 18:22:47 CEST 2009
Steven D'Aprano schrieb:
>> Implementation of a universal set would be pretty trivial.
>
> You think so? I can think of a number of problems.
First, I don't think this is important enough to become a standard
Python type. But regardless, these problems are quite easy to answer.
> (1) What elements should go into the universal set? Strings, ints,
> floats, presidents... ?
Everything. Every possible (i.e. hashable) object is a (virtual) member
of the universal set. You're thinking too mathematically here. Python has
no notion of a category of elements for ordinary sets as well -- you can
put a president in a set together with integers without problems.
> (2) What is len(set.universal())?
Since it was apparently decided that len() can "lie", sys.maxsize would be
a nice value. Otherwise, an exception.
> (3) What does set.universal() print?
'set.universal()'.
> (4) What does set.universal().clear() do?
It clears the set. Afterwards, the set is empty.
> (5) For that matter, union(), copy(), difference(), issubset(), etc?
union() is a no-op, as well as any operation that adds elements.
intersection() just returns the "other" set.
copy() just returns another instance of the universal set.
issubset() - the universal set is the subset of no other set except
the universal set.
To make difference() or remove() and pop() possible, one would have to
expand the notion to a "universal-except" set which again has a finite
number of exceptions.
> (The universal set for strings of length one is a subset of the
> universal set for all strings.)
Again, see the comment for (1).
> I don't think there is a suitable solution for all of these issues. That
> would mean that set.universal() can't be a real set object, it has to
> be some sort of not-quite-a-set object that doesn't provide the entire
> set interface.
Of course, it could not be an ordinary set object (i.e. one actually containing
references to its members) -- that would require an infinite amount of memory.
However, it *can* implement much of the set interface without a problem.
Georg
--
Thus spake the Lord: Thou shalt indent with four spaces. No more, no less.
Four shall be the number of spaces thou shalt indent, and the number of thy
indenting shall be four. Eight shalt thou not indent, nor either indent thou
two, excepting that thou then proceed to four. Tabs are right out.
More information about the Python-ideas
mailing list