Write a function that takes a list of integers and returns a new list where all zeros are moved to the end while preserving the relative order of the non-zero elements. The relative order among zeros does not matter (they can appear in any order at the end). Do not modify the input list in-place; return a new list.
([0, 1, 0, 3, 12],)[1, 3, 12, 0, 0]