Es ist eine Operation; der rechte Ausdruck ausgewertet wird, bevor die linke Zuordnung angewandt wird:
>>> a, b = 10, 20
>>> a, b
(10, 20)
>>> b, a = a, b
>>> a, b
(20, 10)
>>> a, b = a*b, a/b
>>> a, b
(200, 2)
Oder, wenn Sie Multi-Threaded-Umgebungen zu sprechen sind über, dann ist die Zuordnung nicht Atome; der Interpreter wertet eine Tupel Zuordnung mit einem einzigen Operationscode, sondern verwendet separaten Opcodes, um dann die Ergebnisse in jede betroffenen Variablen zu speichern:
>>> def t(self): a,b=20,20
...
>>> dis.dis(t)
1 0 LOAD_CONST 2 ((20, 20))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 1 (a)
9 STORE_FAST 2 (b)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
jedoch normale assigment immer mindestens zwei Opcodes sein würde (ein für der rechte Ausdruck, einer zum Speichern des Ergebnisses), so in Python im Allgemeinen Assigment ist nicht atomar. Sequenz Entpacken ist nicht anders.
Ich habe den Eindruck, dass Sie vielleicht mißverstehen, was * gemeinhin * von der Atomarität in der Softwareentwicklung verstanden wird. Sprechen Sie hier über Thread-Sicherheit oder fragen Sie sich, ob 'a = c' vor 'b = d' ausgeführt wird? –
@MartijnPieters - Wenn OP sich über letzteres Gedanken machen würde, wäre OP sehr verwirrt, warum etwas wie '(a, b) = (b, a)' funktionieren würde, um Werte zu tauschen. Es muss eine Frage zur Fadensicherheit sein. –
@TedHopp: Die Frage ist viel zu vage, um dies zu nennen, und nach meiner Erfahrung verursacht das Tupel-Entpacken eine Menge Verwirrung an und für sich. –