Plot real-time FFT using matplotlib
Since the range of y axis keeps changing, so does the location of the
  plot. How can I fix this?


Use ylim to set the range of values on the Y axis.


  So why does the x axis of my plot end at the period size?


Your input vector is of size 1000 ; so the FFT result is a sequence of 1000 complex numbers. Since you don't specify values / units for the x axis of your plot, you just get an arbitrary index.

To get a frequency scale, label your x axis as arange(0.0, length - 1) / length * 44100


  What do they mean? The real part signifies the frequency and the imaginary part the amplitude?


You should really take some time to understand the Fourier transform. The use of freq_list as a variable name makes me think that you are mistaken as to how the FFT works.

The complex number in freq_list[i] represents the complex amplitude at frequency i / length * 44100. The magnitude of a complex amplitude represents actual amplitude, the angle of a complex amplitude represents phase.

You're probably only interested in the (squared) magnitude, and you'll get much nicer plots if you plot it on a logarithmic scale.


  My objective is to determine the dominant frequency of a signal. To do this, I need to know the frequency and the amplitude of the component with that particular frequency. Can I get this from the fft plot?


Yes, by looking at the index of the FFT bin with the largest magnitude, but it's a rather terrible method for determining the fundamental frequency of audio signals - it has poor resolution and will provide incorrect results in a variety of common audio signals (for example it is common for speech signals to have lower energy at their fundamental frequency than at one harmonic).