# importlib

`reload(module)` re-executes an already imported source module and returns
the same module object. It reloads `.py` source through the current VM's
[import callback](../C-API/modules.md), not compiled `.pyc` or native modules.

For example, save this as `settings.py`:

```python
difficulty = 3
```

Run the following from the directory containing that file:

```python
import importlib
import settings

original = settings
reloaded = importlib.reload(settings)
assert reloaded is original
print(settings.difficulty)  # 3, or the new value after editing settings.py
```

In a long-running host, edit the source and call `reload()` again to pick up
the new contents.

Reloading preserves the module dictionary and attempts to reuse existing
class types. Names removed from the source can remain in the dictionary.
References obtained through `from settings import difficulty` do not update
automatically; prefer `settings.difficulty` for values intended to change.

Reloading executes module-level side effects again and does not roll back a
partially failed reload. Use it for controlled development workflows rather
than assuming it resets all application state.
