thought so too, but we need to copy as we have to create a new row if we have different number of input columns and output columns.

e.g. select format('hello %s', name), name from t: 
 * inputs: name
 * outputs: format(...), name

TopN creates a new array for every row. but values are not necessarily copied.