If you want to keep the approach you described in your question, simply set the 'deepcopy' argument to True when you split() the Function U, that is, you need to do
u, r = U.split(deepcopy=True)
You can then define vector1 and vector2, as you did in the question. If you modify these vectors and want to update U accordingly, you need to do
assign(U.sub(0), vector1)
assign(U.sub(1), vector2)
Hope it helps.