Just a quick idea.
For referenced counted things it is possible to have the counting partially delegated to a local scope from the shared scope. A shadow-thing is allocated in the local scope, increasing the shared counter and setting the local counter to 1. Any new references can be added to the shadow-thing without modifying the shared thing. O(n) comparision can be maintained if item pointer (str for strings) rather than the svalue is used.