Python中的同时赋值语义
考虑以下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的值,则会得到不同的状态:
print(a,i)
分配后版本1的输出:
[0, -1, -1] 1
print(a,i)
分配后版本2的输出:
[-1, 0, -1] 1
我不是Python语义学方面的专家,但是这种行为似乎很奇怪。我希望两个分配的行为都与分配版本1相同。此外,如果您检查以下链接,可能会期望两个分配版本都导致相同的状态:
关于同时分配的Python语义,我缺少什么吗?
注意 :例如,当变量a
具有整数类型时,这种奇怪的行为似乎是不可再现的。它似乎要求a
是列表类型(也许任何可变类型都是这种情况吗?)。