According to the book Programming Erlang (I'm pretty sure, although I can't find the reference anymore), function arguments are always pass-by-value unless they're binary types. Only binaries are pass by reference. Why is this? Erlang is purely functional, so it seems that passing a reference to a list of ten thousand integers would be perfectly safe, and much more efficient than copying the list and then calling the function with the copied data. Is there some danger in giving references to data rather than making copies?