我们都知道多重赋值可以一次赋值多个变量,在swap中很有用。它在这种情况下运行良好:
nums = [2, 0, 1]
nums[0], nums[2] = nums[2], nums[0]
# nums=[1, 0, 2] directly, correct
,但它在更复杂的情况下失败,例如:
nums = [2, 0, 1]
nums[0], nums[nums[0]] = nums[nums[0]], nums[0]
# nums=[1, 2, 1] directly, incorrect
nums = [2, 0, 1]
tmp = nums[0]
nums[0], nums[tmp] = nums[tmp], nums[0]
# nums=[1, 0, 2] with temporary variable, correct
看来 in nums[nums[0]],nums[0]会在之前分配,而不是一次分配。它也在复杂的链表节点交换中失败,例如:
cur.next, cur.next.next.next, cur.next.next = cur.next.next, cur.next, cur.next.next.next
# directly, incorrect
pre = cur.next
post = cur.next.next
cur.next, post.next, pre.next = post, pre, post.next
# with temporary variable, correct
所以我想知道Python 中多重赋值背后的机制,以及对此的最佳实践是什么,临时变量是唯一的方法?
交互式爱情
相关分类