Rubyの多重代入でswapできるけど内部的にはどうなっているか

oftonkingdom.hatenablog.com

上記記事で書いた以下のようなswapをするとき内部的にどうなっているのか気になりました.

a = ‘もしかして’
b = ‘俺たち’
a, b = b, a #入れ替わってるー??

考えたんですけど単純に式の評価の順番的に以下のように(逐次代入)するとだめですよね.

  1. bの値を評価してaに代入(この時点でa='俺たち',b='俺たち')
  2. aの値を評価してbに代入(この時点でやはりa='俺たち',b='俺たち')

とすると,やはり内部的には右辺を一度に評価してから左辺に代入している?(以下のように)

  1. a, bの値を一度に評価する(この時点でa='もしかして',b='俺たち'),
  2. a, bにそれぞれ代入する.

調べてみたのですがやはりそういう処理をしていると考えないと成立しないですよね…