didSet behaviour on List type

Looking back with the convenience of hindsight… it is possible that Swift could have been designed in a way to communicate value semantics effectively while also clearly breaking apart where value semantics end and where reference semantics begin…

The argument could be made that variable value types in Swift are not "traditional" immutable data structures… but they adopt similar ideas and philosophies IMO (assuming that we are talking about variable values and not constant values). What we colloquially call "modifying" an Array instance is producing a new value (but this value might be written in-place… which is one difference between a Swift struct and an immutable data structure from a purely functional programming context).

If you really want to dive deep on this specific data structure… yes Array is a copy-on-write data structure built on an object reference… but this is "progressive disclosure". For the most part… product engineers go about their business with the assuming that Array is a value type with value semantics. If the infra engineer breaks value semantics… that is a bug in the infra that needs to be fixed.