Just make InputData and OutputData immutable, and construct new ones (that share couplings.
function solve_system(input::InputData)
N = length(input.couplings)
# Make new output
out = OutputData(N)
# To solve the system, out.couplings
# is the ordered input.couplings plus some randomness
out.couplings .= (input.couplings .+ rand(N)) #should take about 3μs
sort!(out.couplings) #should take about 3μs
# out constant is the penultimate coupling
out = OutputData(out.couplings, input.couplings[N-1])
out
end