临时变量

通过建立一个临时变量来实现两数交换:

def swap(x, y):
    print(x, y)
    tmp = x
    x = y
    y = tmp
    print(x, y)
    return x, y

if __name__ == '__main__':
    swap(1, 2)

缺点:

需要消耗额外的内存。

优点:

不限制类型,大多数类型都能使用该操作。


加减交换

通过加减法实现:

def swap(x, y):
    print(x, y)
    x = x + y
    y = x - y
    x = x - y
    print(x, y)
    return x, y

if __name__ == '__main__':
    swap(1, 2)

假设两个数保存在x和y中:

  1. 先将y中的值加到x中。

    即这两个数一同保存在同一内存空间x中。

  2. 然后用x的值减去y的值,再将其保存到内存y中。

    x-y即为x最初的值。

  3. 最后再用x的值减去y的值,赋给内存x。

    x最初的值已经在y中,所以x-y的值为y最初的值。

缺点:

该方法只适用于数值不大的数,如果数值过大,可能会越界(对于某些语言来说)。


异或交换

通过异或的操作实现:

def swap(x, y):
    print(x, y)
    x = x ^ y
    y = x ^ y
    x = x ^ y
    print(x, y)
    return x, y

if __name__ == '__main__':
    swap(1, 2)

缺点:

只能对整数类型执行位操作,不能对实数类型进行位操作。