After reading this question I started to wonder: is it possible to have a shuffling algorithm which does not modify or copy the original list?
To make it clear:
It sounds impossible.
But 10,000,000 64-bit pointers is only about 76MB.