考虑以下Python 3代码:
a = [-1,-1,-1]
i = 0
现在考虑同时对a和i进行两个版本的赋值:
赋值版本1:
a[i],i = i,i+1
作业版本 2:
i,a[i] = i+1,i
我希望这两个同时赋值的版本在语义上是等效的。然而,如果你检查每一个同时赋值后a和i的值,你会得到不同的结果:
版本1赋值后print(a,i)
的输出:
[0, -1, -1] 1
第二个版本赋值后print(a,i)
的输出结果:
[-1, 0, -1] 1
我不是Python语义学的专家,但这种行为似乎很奇怪。我希望两个赋值都像赋值版本1一样。此外,如果您检查以下链接,人们会期望两个赋值版本导致相同的状态:
对于Python同时赋值的语义,我是否遗漏了什么?
注意:这种奇怪的行为似乎无法重现,例如当变量a
具有整数类型时;它似乎需要a
是列表类型(也许对于任何可变类型都是如此?)。
a, b = 1, 2
只是(a, b) = (1, 2)
的简写,这被称为序列解包。 - Blender