[Python-Dev] Getting values stored inside sets (original) (raw)

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 "", line 1, in 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