Using the equals sign for assignment makes sense if you don't think of variables as buckets to put values in, like so many misguided novices do.<br>You declare the identifier and the value as equal.<br>The problem begins when you start re-using the identifier for other purposes.<br>Don't do that!  Let the compiler figure out how best to make use of the available registers.  That's what it's there for.<br><br>Admittedly, with a low-level language like Python or Fortran, there is no compiler to do that for you.  (I know that Python has a JIT compiler, but it's still a scripting language.)<br>So on an old PDP-1, programmers had to compromise to fit their programs in core memory and still get performance.<br>Python programmers have no such excuse.<br><br>Frankly, there is no reason for re-assigning an identifier.<br>For-loops can be replaced with list comprehensions, which are not only more terse (and yet still readable), but also isolate side effects.<br>While loops could be replaced with tail recursion, if Guido van Rossum weren't so strictly opposed to the idea.  (That is an obstacle that will soon have been overcome.)<br>And thus, any identifier has one, and only one, purpose, and hopefully an expressive name for it.<br>(Which would make the JIT compiler quite a bit simpler, too.)<br><br>As for confusing the assignment operator for the equality operator:<br>They could be the same operator with no ambiguity, but that would make chain assignments impossible.<br>But if you never re-assign identifier values, when would you need chain assignments?<br><br>For Python3 that is not an option of course, because it would break existing code.<br>But only RedHat is still hanging on to Python2.  The rest of the world has long since moved on from this unsupported relic.<br>A new version of Python might even get proper versioning support.