Steve D'Aprano wrote:
# create a new binding x: address 1234 ----> [ box contains 999 ] x: address 5678 ----> [ a different box, containing 888 ]
In the context of CPython and nested functions, replace "box" with "cell". When I said "creating a new binding" I meant that the name x refers to different cells at different times. When I said "updating an existing binding" I meant that the name x still refers to the same cell, but that cell refers to a different object. In a wider context, replace "box" with "slot in a stack frame" or "slot in a namespace dictionary".
But Python doesn't work that way! Variables aren't modelled by boxes in fixed locations, and there is no difference between "create a new binding" and "update an existing one".
There is very much a distintion. Each time you invoke a function, a new set of bindings is created for all of its parameters and local names. Assigning to those names within the function, on the other hand, updates existing bindings. -- Greg -- https://mail.python.org/mailman/listinfo/python-list