This is answered in PEP 572
Alternative spellings
Broadly the same semantics as the current
  proposal, but spelled differently.
EXPR as NAME:
stuff = [[f(x) as y, x/y] for x in range(5)]
Since EXPR as NAME already has meaning in import, except and with
  statements (with different semantics), this would create unnecessary
  confusion or require special-casing (e.g. to forbid assignment within
  the headers of these statements).
(Note that with EXPR as VAR does not simply assign the value of EXPR
  to VAR -- it calls EXPR.__enter__() and assigns the result of that to
  VAR.)
Additional reasons to prefer := over this spelling include:
In if f(x) as y the assignment target doesn't jump out at you -- it
  just reads like if f x blah blah and it is too similar visually to if
  f(x) and y.
In all other situations where an as clause is allowed, even readers
  with intermediary skills are led to anticipate that clause (however
  optional) by the keyword that starts the line, and the grammar ties
  that keyword closely to the as clause:
import foo as bar
except Exc as var
with ctxmgr() as var
To the contrary, the assignment expression does not belong to the if or while
  that starts the line, and we intentionally allow assignment
  expressions in other contexts as well.
The parallel cadence between
NAME = EXPR
if NAME := EXPR
reinforces the visual recognition of
  assignment expressions.