I'm looking through the source of StringIO where it says says some notes:

Using a real file is often faster (but less convenient).
There's also a much faster implementation in C, called cStringIO, but
it's not subclassable.

StringIO just like a memory file object, 
why is it slower than real file object?
It is not neccessarily obvious from the source but python file objects is built straight on the C library functions, with a likely small layer of python to present a python class, or even a C wrapper to present a python class. The native C library is going to be highly optimised to read bytes and blocks from disk. The python StringIO library is all native python code - which is slower than native C code.
Why is StringIO object slower than real file object?