On Mon, 27 Dec 2010 12:05:10 +0100, Ulrich Eckhardt wrote: > What I'm now considering is to only allow a single instance of these > objects for each set of values, similar to interned strings. What I > would gain is that I could safely compare objects for identity instead > of equality. What I'm not yet sure is how much overhead that would give > me and/or how to keep it low. The idea is to store each instance in a > set and after creating a new object I would first look up an equal > object in the global set and return that instead, otherwise add the new > one.
Try this technique: >>> class InternedTuple(tuple): ... _cache = {} ... def __new__(cls, *args): ... t = super().__new__(cls, *args) ... return cls._cache.setdefault(t, t) ... >>> >>> >>> t1 = InternedTuple((1.0, 2.0)) >>> t2 = InternedTuple((0.0, 0.0)) >>> t3 = InternedTuple((1.0, 2.0)) >>> >>> t1 is t2 False >>> t1 is t3 True >>> t1 == t2 False >>> t1 == t3 True -- Steven -- http://mail.python.org/mailman/listinfo/python-list