Write a function to reverse a string, and explain how you would optimize it for memory usage.
Implement def reverse_string(s):, which accepts a Python string and returns a new string containing the characters of s in reverse order. Preserve spaces, punctuation, digits, and Unicode code points. Explain why Python string immutability affects in-place reversal and distinguish output memory from auxiliary memory.
Examples: "Auburn" returns "nrubuA"; "" returns "".
Constraints: 0 <= len(s) <= 100000.
def reverse_string(s):