In Python, why is list[] automatically global?
You only need to use global
if you are assigning to the global name. Without global
, an assignment creates a new local.
There's nothing special about how global
applies to a list—global
simply influences scope and name resolution.
It isn't automatically global.
However, there's a difference between rep_i=1
and rep_lst[0]=1
- the former rebinds the name rep_i
, so global
is needed to prevent creation of a local slot of the same name. In the latter case, you're just modifying an existing, global object, which is found by regular name lookup (changing a list entry is like calling a member function on the list, it's not a name rebinding).
To test it out, try assigning rep_lst=[]
in test2
(i.e. set it to a fresh list). Unless you declare rep_lst
global
, the effects won't be visible outside test2
because a local slot of the same name is created and shadows the global slot.