1.采用第三个变量暂存
a = 1
b = 2
temp = a
a = b
b = temp
2.加减法
a = a + b
b = a - b
a = a - b
3.异或运算
a = 1
b = 2
a = a ^ b
b = a ^ b # 实际为(a^b)^b,即a
a = a ^ b # 实际为(a^b)^a,即b
4.直接交换(不同于C,多变量赋值)
a,b = b,a # 将b的值赋值给a,同时将原a的值赋给b
同理:
a = 1
b = 2
a,b = 4,a+b
print('a等于',a)
print('b等于',b)
结果为:
a等于 4
b等于 3
!!!注:python中对变量的赋值其实是‘引用’
例:a = 100 ,先在内存存入100这个数,然后将变量a引用到100这个值。而非在变量a的内存空间存入100。
>>> a = 100
>>> def test(num):
>>> num += num
>>> print(num)
>>> test(a)
>>> 200
>>> print(a)
>>> 100
num 为函数内定义的局部变量,当a=100传入函数时,将num引用到100、这个值。而数字、字符串、元组类型数据为不可变类型(不可赋值?不可分配?),故函数执行完成后并没有对数据100所在内存空间的数据进行更改,而是在内存内另存入一个数值200,然后用num引用到这个值(200)。
当数据没有被任何引用时,python的垃圾清理机制会自动释放此数据所在内存空间。
>>> a = [100]
>>> def test1(num):
>>> num += num
>>> print(num)
>
>>> test1(a)
>>> [100, 100]
>>> print(a)
>>> [100, 100]
列表、字典为可变类型,定义后可当做全局变量来使用
注:
>>> a = [100]
>>> def test2(num):
>>> num = num + num
>>> print(num)
>
>>> test2(a)
>>> [100, 100]
>>> print(a)
>>> [100]
!!! 注(与C不同):
num = num + num,[100] + [100] ------>>[100,100]在另一片内存空间新存入了一个数据,然后将这个列表引用到num,即num引用对象发生了改变。
num += num ,num引用对象并没有发生改变,可以理解为在原引用对象的内存空间直接对数据进行改变。
以上两例可以这样便于理解:赋值运算,先计算完左边,然后再赋值给右边。