You must first understand how pygame.display.flip
and pygame.display.update
work.
When the screen mode pygame.DOUBLEBUF
is set, Pygame actually maintains two screens: the active screen which is presently displayed and a buffer which you (the programmer) can update behind the scenes (without the user seeing anything).
Once you are done with your edits on the buffer, you can use pygame.display.flip
to switch the active screen with the buffer. The entire screen is updated. This is the recommended way to update the entire screen. Also, this is the only way to update non-software screens (OPENGL and Hardware accelerated screens for example).
pygame.display.update
on the other hand treats the screen as a group of pixels (that's called a software screen). This allows a Pygame program to update only a portion of the screen. This is faster as only a portion of the screen needs to be modified.
Now, if the entire screen is to be updated (pygame.display.flip
and pygame.display.update
without any arguments) pygame.display.flip
is faster.
Remember, I said OpenGL and HW-accelerated screens (SOFT-screens too) maintain a buffer. Drawing to this buffer is slow, but flipping is very fast (in HW-screens and OpenGL). Updating the entire screen using pygame.display.update
is even slower as it does things pixel by pixel and without HW-acceleration.