When I edit a cell in the notebook and re-evaluate it, it "overwrites" the input and the output of the previous edit. I want it to copy my edited version to the bottom or something and give me a separate output, not overwriting the old results or old input.
Mike's method seems a fine answer to me, but if you just occasionally want to keep an existing output, for instance as a reference to see whether a new evaluation causes a change or not, I usually place the insert beam between input and output cells and press enter, creating an empty cell in-between. This prevents the original output cell from being overwritten.
In addition, I find Ctrl-L (Copy Input from Above) and Ctrl-Shift-L (Copy Output from Above) often useful in this context. Both commands can also be found in the Insert menu.
I'm not sure how your input would get overwritten -- can you add a screen grab showing this?
As for the output there is a default option for cells called
To switch off in your notebook choose Selected Notebook from the popup menu and set
To switch off globally choose Global Preferences from the popup menu.
With this option set to
Once you know what option controls whatever you want to change you can also set the option programmatically:
The catch of course is identifying the appropriate option in the first place and to a degree this just comes with experience.