前提条件- 2 つの重要なポイント
序章
a,b = c,dとの値を実行するcとd、最初に保存されます。次に、左辺から順に の値を にa変更しc、次に の値をbに変更しdます。
ここでの問題はb、 の値を変更しているときに の場所に何らかの副作用がある場合、 の副作用の影響を受けるの後aにdが割り当てられることです。 bba
使用事例
今あなたの問題に来ています
最初のケースでは、
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]