Whenever you do operations such as new_variable = interpolate(something, some space)
you will assign new memory.
However, if you instead go down the route:
new_variable = Function(some_space)
new_variable.interpolate(something)
# Use variable
# ....
new_variable.interpolate(something_else)
you will not assign new memory for either of the interpolate functions.
I have already mentioned this in: Write Function to file at multiple time steps - #7 by dokken