前提条件- 2 つの重要なポイント
序章
a,b = c,d
との値を実行するc
とd
、最初に保存されます。次に、左辺から順に の値を にa
変更しc
、次に の値をb
に変更しd
ます。
ここでの問題はb
、 の値を変更しているときに の場所に何らかの副作用がある場合、 の副作用の影響を受けるの後a
にd
が割り当てられることです。 b
b
a
使用事例
今あなたの問題に来ています
最初のケースでは、
nums = [1, 2, 0]
nums[nums[0]], nums[0] = nums[0], nums[nums[0]]
nums[0]
は最初は1
でnums[nums[0]]
あり2
、 と評価されるためnums[1]
です。したがって、1,2 がメモリに格納されます。
タプルのアンパックは左側から行われるので、
nums[nums[0]] = nums[1] = 1 # NO side Effect.
nums[0] = 2
したがって、print nums
印刷されます[2, 1, 0]
ただし、この場合
nums = [1, 2, 0]
nums[0], nums[nums[0]] = nums[nums[0]], nums[0]
nums[nums[0]], nums[0]
最初のケースと同じように、スタックに 2,1 を置きます。
ただし、左側、つまり では、 のインデックスとして使用されているためnums[0], nums[nums[0]]
、 を変更するとnums[0]
副作用がありますnums[nums[0]]
。したがって
nums[0] = 2
nums[nums[0]] = nums[2] = 1 # NOTE THAT nums[0] HAS CHANGED
nums[1]
value のまま変更されません2
。したがって、print nums
印刷されます[2, 2, 1]