Here is a code snippet.
x = {}
x[1] = len(x)
print(x)
# {1: 0}
Is this well defined? That is, could x
be {1: 1}
instead?
Because I remember that an equivalent program in C++98 (if we use std::map
) has undefined behaviour. The output of the program was different when compiled with VS compiler and G++.
The question is, is x[1] == 0
, or is x[1] == 1
?
Let's look at the relevant documentation (2.x version):
Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.
In the following lines, expressions will be evaluated in the arithmetic order of their suffixes:
... expr3, expr4 = expr1, expr2
Therefore len(x)
will be fully computed before we do x[1]
, so x[1] == 0
and this is well defined.