That’s how the delegation works right now: it copies the reference to the delegate upon creation, and delegates all calls to that reference.
The reason why it doesn’t work another way is simple: it just wasn’t designed/implemented/tested/documented by somebody.
There is a couple of feature requests to make it possible to switch a delegate during lifetime of an object:
- https://youtrack.jetbrains.com/issue/KT-5870 Delegation to var field
- https://youtrack.jetbrains.com/issue/KT-83 Distinguish syntactically when delegating to a property