python 中为什么不需要 swap() 函数,而只需要执行:
a, b = b, a
就可以交换 a,b 的值呢?
这是因为在 python 中,变量所指向的都是一个对象,以引用的方式来使用对象。
以 a = 1 为例,python 中首先给 “1”分配一个地址,然后把 “1”放进去,即在“地址 1 ”中放入“1”,然后让 a 指向这个地址(a 也就是 C++ 中的指针)。
这时候,如果我们再定义一个 b = 1 ?
因为 "1" 已经存放到“地址 1”中了,所以直接可以让 b 指向“地址 1 ”就可以了。
我们以一段代码来表示这个过程:
a = 1
b = 1
print(id(a), id(b)) # id(a)输出 a 所指向的地址
输出:
1727058992 1727058992
具体值可能不同,但两个值一定相同,也就是说明了 a, b 其实是指向了同一个地址中的 value。
下面说明 a, b = b, a 的实现。
首先来段代码:
a = 1
b = 2
print(id(a), id(b)) # id(a)输出 a 所指向的地址
a, b = b, a
print(id(a), id(b))
输出:
1727058992 1727059008
1727059008 1727058992
a 指向“地址1",b指向 "地址2”,执行 a, b = b, a 时,其实只是交换了这两个指针所指向的地址,并没有对具体的 value 的改变,所以不需要 swap() 函数,