正常情况:
a, b = b, a
相当于
b, a = a, b
异常情况:
nums = [1, 2, 4, 3]
i = 2
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
print(nums)
# [1, 2, 4, 3]
nums = [1, 2, 4, 3]
i = 2
nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
print(nums)
# [1, 2, 3, 4]
两种情况不相等。
文档说明:
将对象赋值给目标列表(可选括在圆括号或方括号中),递归定义如下。
对象必须是一个与目标列表中的目标数量相同的可迭代对象,并且这些项从左到右被分配给相应的目标。
文档地址:python.org
nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
相当于
tmp = nums[nums[i]-1], nums[i]
nums[i] = tmp[0]
nums[nums[i] - 1] = tmp[1]
nums[i], nums[nums[i]-1]
nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
相当于
tmp = nums[i], nums[nums[i]-1] nums[nums[i] - 1] = tmp[0] nums[i] = tmp[1]
nums[i]
先更新,则nums[nums[i] - 1]
引用的索引与nums[i]
第二次更新的索引不同。