Swap works in a fairly simple way, just by swapping the memory used by the objects.
Evilr also allows you to swap just instance variables, just singleton classes, or just method tables between objects, in which case it's just swapping the two pointer values.