Passar argumentos por referência a um bloco com o operador splat

Parece que os argumentos são copiados ao usar o operador splat para passar argumentos para um bloco por referência.

Eu tenho isto:

def method
  a = [1,2,3]
  yield(*a)
  p a
end

method {|x,y,z| z = 0}
#=> this puts and returns [1, 2, 3] (didn't modified the third argument)

Como posso passar esses argumentos por referência? Parece funcionar se eu passar a matriz diretamente, mas o operador splat seria muito mais prático, intuitivo e sustentável aqui.