% hhh=( "${(@f)iii}" )
What? No. Why do you keep bringing (f) into this? That flag has nothing to do with copying; in fact it intentionally changes things: anywhere there used to be a single string containing a newline,you get two strings instead.
... so far so good with tests. The (f) seems not to have removed anything -- I was sure it did, yesterday :( -- but that was then. But yours seems to work and it's simpler, more intuitive. The (f) does not seem to be missed, either. And to think that just yesterday I thought I had this all sorted.
But if you drop the f, you do get your Xerox copy:
% fff=( "${(@)ddd}" )
'IF' ... what I'm wanting is some universal copy that has no gotchas.Would it be nicer if you could just do fff=$ddd and not have to include the parens and quotes and @? Sure. You could even make a case that it should work that way, since we're in Zshland where $ddd expands to the whole array instead of a single element. But that's not the way assignment works. Though, as I said, if the array has no empty elements, you can get away with just fff=($ddd).