[Python-Dev] Getting values stored inside sets
Steven D'Aprano
steve at pearwood.info
Fri Apr 3 16:57:21 CEST 2009
On Fri, 3 Apr 2009 11:22:02 pm Paul Moore wrote:
> I'd say that you're abusing __eq__ here. If you can say "x in s"
> and then can't use x as if it were the actual item inserted into
> s, then are they really "equal"?
That's hardly unusual in Python.
>>> alist = [0, 1, 2, 3, 4]
>>> 3.0 in alist
True
>>> alist[3.0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers
Besides, there's a concrete use-case for retrieving the actual object
inside the set. You can ensure that you only have one instance of any
object with a particular value by using a cache like this:
_cache = {}
def cache(obj):
if obj in _cache: return _cache[obj]
_cache[obj] = obj
return obj
Arguably, it would be neater if the cache was a set rather than a dict,
thus saving one pointer per item, but of course that would rely on a
change on set behaviour.
--
Steven D'Aprano
More information about the Python-Dev
mailing list