When I read about sets in Python, it is always mentioned that they return items in an arbitrary/random order. What exactly causes this "randomness"?
It's not so much that they are random, but that since it is undefined, you should make no expectations as to what order they are in unless you specifically order it.
There are a variety of python interpreters. There are a lot in fact. When you add items to a list, the python interpreter is responsible for keeping track of the items. Each interpreter could keep track of them in different ways. The underlying storage mechanism could change from one version to the next of a single interpreter. It could change storage strategies based on the size of the list. It could change storage strategies based on the processor architecture, based on what day of the week it is, basically any criteria the interpreter developers decide is important.
So the advice to treat the order as random is to form the habit not to depend on a non-required behavior for your programs. Sure, chances are good that the order of a list is going to be the same as the order items are added, until suddenly it isn't and your program explodes. If you always mentally treat the order as arbitrary/random, you'll never be caught by surprise because you'll always explicitly order the list in whatever ordering is required for the task at hand.