It’s not a bug, it’s simply that when you compare two floating-point numbers, they are allowed to differ a bit, because floating-point numbers are not infinite-precision. So it is expected behavior that (str(i) == str(j)) will not always be the same as (i == j).
Actually, it’s more than that: the EggAttributes class, which EggVertex inherits from, has a special definition of ==, which is designed to compare equivalent attributes as equal. So if two attributes have the same properties, they considered equal, even if they are not actually the same object. This is used internally by the egg library.
It happens that EggVertex doesn’t override this definition, so it inherits it; and you end up comparing two vertices based on their attributes alone, ignoring position. This is arguably a bug. I can check in a fix.
Comparing the pointers may not work, because that’s comparing the pointers of the Python wrapper objects, not the underlying C++ objects. Since you get a new Python wrapper object with each call into C++, it will fail: el.getVertex(0) is not el.getVertex(0). But you can compare v0.this == v1.this for a reliable comparison of the underlying C++ pointers.