> Why did you want to customize "is"? Well, mostly out of principle ;-)
But also because I'm wrapping a C library which passes around C structs which are wrapped in shim C++ classes for a Boost.Python layer. Boost Python does a marvelous job of translating between Python and C++ data types; when a C structure is returned, it magically translates that structure into a Python wrapper. The problem is that a _new_ Python wrapper is created every time a pointer is returned, even if a wrapper already exists for that particular pointer. To illustrate: Suppose you have a function in C++ which is a simple identity function, e.g. template <typename T> T *identity (T *x) { return x; } Calling the wrapped version of this function from Python will produce a Python wrapper which represents the same underlying C++ object, but is not actually the same Python object: >>> b = identity(a) >>> b is a False I wanted to override the behavior of "is" so that (a is b) would be True --- which shouldn't have caused a problem, since the wrapper class's attributes are read-only from Python. As it is, I've overriden __cmp__ and __hash__, so at least I get the correct dictionary behavior >>> mydict = { a : 'something' } >>> b = identity(a) >>> b in mydict True It's quite possible that there is some way to do this correctly from the Boost.Python side of things... my understanding of how to use Boost.Python is minimal. -- http://mail.python.org/mailman/listinfo/python-list