Changing local vars via `locals()`

Makoto Kuwata kwa at kuwata-lab.com
Mon Mar 2 20:31:47 EST 2020


Hi, folks.

I know that it is not possible to change local vars via `locals()` (except
in module-level).

```
import sys

def f1():
    x = 1
    d = locals()
    d['x'] = 2
    print(x)  #=> 1  (not changed)

f1()
```

But I found that it is possible in class definition.

```
import sys

class Foo:
    x = 1
    d = locals()
    d['x'] = 2
    print(x)  #=> 2  (changed!!!)
```

Can anyone explain about difference between above two?
Why it is possiable to change local var via `locals()` only in class
definition?


More information about the Python-list mailing list