Can you do something like this?
OldXData,OldYData = CalculateData(a,b,c) #this process takes ages
SavedContourPlot = plot(OldXData,OldYData)
NewContourPlot = plot(OldXData,OldYData) #do twice the plot, this shouldn't recompute the data, you end up with two different objects
plot!(NewContourPlot, (NewYdata, NewXdata)); display(NewContourPlot) #Modify only one of the plot objects
Another option is to do what you were trying but using the deepcopy function:
HoldTheOldPlot = deepcopy(SavedContourPlot)
NewPlot = plot!(SavedContourPlot, (NewYdata, NewXdata)); display(NewPlot)
This will work because you are actually copying the plot object and associating it with the binding HoldTheOldPlot, whereas in your version, you were only pointing said binding to the same object.
You can read more about the deepcopy function by doing ?deepcopy in the REPL