avoid calling reflect.New for each Swap, maintain one tmp and reuse it