When an instance of a value type, such as a structure, is assigned to another variable, that second variable receives a copy of the instance. This means that, if we had an array that contained 50,000 elements, then at runtime we would need to copy all 50,000 elements when we assigned the array to a second variable or if we passed it to another part of our code. This can severely impact our performance; however, with Swift built-in data structures such as the array this impact is reduced because of Copy-on-write.
With Copy-on-write, Swift does not make a second copy of the data structure until a change is made to that data structure. Therefore, if we pass an array of 50,000 elements to another part of our code, and that code does not actually make any changes to the array, we will avoid the runtime overhead of copying all the elements.
Unfortunately, Copy-on-write is only implemented with certain types in the Swift Standard library and does not come free with all value types....