I'm creating an array of surfaces (Pre-Rotated or pre-effect treated) and its working nicely and extremely fast for python anyhow.  However I notice there is a massive amount of memory being used and I tracked it down to the fundamental loading of the original image or creating a surface copy.  
The image i'm testing with is 65kb png file on disk.  Loading the image or copying a surface with this same image resuls in 1.2mb additional memory usage.  I could understand 2,3,4x but 20x?   So preloading a solid number of small images to make things faster sounds good until I understood this memory impact.  The net is if I pre-rotated this image by 5 degrees aka 72 images (360/5) python image memory is sitting at 100mb not including the routine overhead of the modules etc...  This seems quite unbelievable actually. 
Anyone got any ideas as to why/how/tips/tricks etc... ?
Found kind of an answer that helps drastically.  It looks like the image load routine bit depth is tied directly to the display.set_mode bit depth which on my system is 32bit default basically forcing 32bit depth on all images uploaded.  Considering I only need max 16 bit depth on the display as well as the images this got the bloat down to about 7x or so.  Still larger than I think is reasonable but makes what i'm trying to do within the realm of possibility.
How to reduce the impact of large memory usage on small images loaded?