1 hash function is random for non non-primitive objects, and it's seed is reset each time the interpreter is ran
Example:
python -c "print(hash('hello world'))"
generates random numbers,
while python -c "print(hash(4.2))"
always returns a constant value
This code will run forever ( and eat all your RAM ):
python -c "l = [1]; l.extend(i+1 for i in l)"
While this one won't
python -c "l = [1]; l.extend([i+1 for i in l])"