In order to implement Flink TypeSerializer the runner implements CoderTypeSerializer. The way the copy function is implemented is by first serializing and then deserializing each element. This means that such a deep copy needs to be done between each operator and this can become a bottleneck.
The reason the copy functions need to be implemented is that Flink guarantees that elements will be deep copied between each operator. In Beam this is the users responsibility and so this is not strictly neccecarry.
The aim of this improvement is to introduce an option on the Flink Runner, that eliminates this overhead, by simply returning the value.