It's "correct" behavior because the default implementation is allowed to go self = someCompletelyDifferentObjectOfTheSameType
, and that would reassign the reference at the call site. See SR-142 for some more discussion.
Even beyond this, mutating
and classes don't play so well together. It may not be the best model for what you're trying to do.