Given the two snippets below, why does compiling 'x = "abc"' normally emit 'putstring' while a frozen string literal emits 'putobject', and what does that imply about object identity across executions of that line?
# normal: putstring "abc" (fresh mutable copy each run)
# frozen: putobject "abc" (one shared frozen object)