What are the real differences between quicksort and mergesort, beyond the textbook bullet points?
Both are O of n log n on average, so the interesting differences are not the asymptotics. Mergesort always hits that bound and always needs O of n extra space for its merge buffer. Quicksort sorts in place with only logarithmic stack space, but a bad pivot choice turns it into a quadratic algorithm, so its guarantee is expected rather than absolute.
The difference that bites hardest in production is stability. Mergesort is stable, so equal elements keep their relative order. Quicksort is not stable, and making it stable costs the in-place advantage. That matters whenever you sort records by one key while a second key implicitly breaks the tie, such as sorting events by timestamp while expecting a stable order of insertion.
There is also a constant factor difference that comes from memory rather than from counting comparisons. Mergesort copies elements into a second array, so every element is written twice. Quicksort swaps elements within one array, so it touches memory in place and benefits from the CPU cache, which in practice makes it faster than mergesort on random data despite the same asymptotic cost.
The trade-off to state in an interview is that neither dominates. Mergesort buys a worst case guarantee and stability with extra memory. Quicksort buys in-place operation and cache friendliness at the price of stability and a pathological input. Randomising the pivot removes the pathological case for all practical purposes, and Python's built-in sort sidesteps the choice entirely by using a stable, adaptive merge sort that also exploits existing runs in the data.