Перезагрузка встроенных в Python

Я изучаю концепцию пространства имен в Python и не могу объяснить следующее: перезагрузка builtins не эффективно перезагрузить модуль. Вот пример:

import importlib as il
import os

import mymodule
mymodule.x = 6
print(mymodule.x)
mymodule = il.reload(mymodule)
print(mymodule.x)


import builtins
builtins.print = lambda x : os.system('echo hello')
builtins.print('hi')
builtins = il.reload(builtins)
builtins.print('hi')

Где mymodule просто содержит назначение x = 5, Выход:

6
5
hello
hello

Может быть, это глупый вопрос, но в чем причина такого поведения?

1 ответ

Решение

Из документов:

Как правило, не очень полезно перезагружать встроенные или динамически загружаемые модули. перезарядка sys, __main__, builtins и другие ключевые модули не рекомендуется. Во многих случаях модули расширения не предназначены для инициализации более одного раза и могут произойти сбой произвольным образом при перезагрузке.

Другие вопросы по тегам