On the first example, it can be useful if you have an embedded system with limited memory. If you need to swap two large buffers and there isn't room to create a third temporary buffer, the xor technique makes it possible to do the swap.
This isn't necessarily any faster than copying to a buffer, but it is still reasonably fast, But the main point is it allows you to do something that wouldn't be possible any other way.
I am not sure if there is really any good reason to use the technique on a modern computer where memory management is out of your control.
The example you gave of swapping Python variables seems like it would be counterproductive. Python variables hold references to objects, so when you swap the values of two variables all you are doing is swapping two pointers. It doesn't matter how big the data structures are. I would be surprised if three variable assigns and three xor operations is faster than packing and unpacking a tuple.