Swift already uses reference counting for memory management, so copy-on-write is basically free -- it just checks to see if the collection's reference count is greater than 1 before writing.
It’s free since the language is already using reference counting. But yes, retain/release traffic is often a huge problem in performance-critical code.