考虑以下Python3程序:
a = [0, 0]
i = 0
a[i] = i = 1
print(a, i)
a = [0, 0]
i = 0
i = a[i] = 1
print(a, i)
Run Code Online (Sandbox Code Playgroud)
我期望输出为:
[0, 1] 1
[1, 0] 1
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了:
[1, 0] 1
[0, 1] 1
Run Code Online (Sandbox Code Playgroud)
我的问题是:Python语言规范中有关于赋值运算符的关联性的内容,还是上述示例的行为未定义?
我能够找到的是表达式从左到右进行评估,除了在赋值的情况下首先计算r值,但这没有帮助.
只是为了说清楚,因为我努力了解这一点.该声明:
a = b = c = ... = E
Run Code Online (Sandbox Code Playgroud)
相当于
a = E
b = E
c = E
...
Run Code Online (Sandbox Code Playgroud)