Имейте в виду, что парное назначение не является «особой функцией» Python. Если вы немного знаете о Python, это то, о чем вы уже знаете, но можете не знать, что знаете. Когда вы помещаете в консоль python следующее:
>>> 'a', 'b'
Что вы получите взамен:
('a', 'b')
Другими словами, кортеж. В вашем примере
self.a, self.b = self.b, self.a+self.b
что вы на самом деле делаете:
(self.a, self.b) = (self.b, self.a+self.b)
- Создайте кортеж, который содержит значение self.b и значение self.a + self.b. (Кортеж справа.)
- Создайте кортеж, содержащий self.a и self.b. (Левый кортеж.)
- Чтобы создать этот левый кортеж, создайте новый экземпляр self.a и self.b для этого нового кортежа. Их старые значения больше не имеют значения: они находятся во временном кортеже правой руки.
- Присвойте значение 0 левой переменной кортежа значению 0 правого кортежа.
- Присвойте значение 1 левой переменной кортежа значению 1 правого кортежа.
- Теперь, когда назначены обе переменные левого кортежа, удалите оба кортежа. Новые переменные остаются с новыми значениями.
Так, например, вы можете сделать:
>>> a, b = 1, 2
>>> a, b
(1, 2)
>>> a, b = b, a
>>> a, b
(2, 1)
Все еще существуют временные переменные, но вы, программист, не должны иметь с ними дело.