Yes, I think that clever as ptc24's counterexample is (and doubly so because I tried to construct a similar thing and didn't quite get it to work), it falls into the same category as cartesiandaemon's question about NaN: if you define a class which has deliberately weird behaviour when compared, then you've violated the warranty of any of these methods once you try to use an instance of that class as a key or value in the dictionary or as a key or value to test for. It's only fair game to use it as the dummy non-value.