This is a "simple" consequence of how the memory allocator works. It is very similar to the case:
>>> id([]) == id([])
True
Basically python doesn't guarantee that ID's don't get reused -- it only guarantees that the id is unique as long as the object is alive. In this case, the first object being passed to id is dead after the call to id and (C)python re-uses that id when creating the second object.
Never rely on this behavior as it is allowed by the language reference, but certainly not required.