Another option if you can afford it is to just use immutablejs.
Or make your functions return new objects.
Or make your functions return new objects.
Personally, I prefer not having to mutate data, even wrapped in a produce method
If so, indeed immutable objects would not run into the problem of copying, as long as you can afford them to be immutable. (That is, you're not working with any APIs that assume and use mutability.)
If you know the shapes of your objects ahead of time you can create one-off functions, which will probably be faster and require far less code.