Désolé pour le titre confus, laissez-moi vous expliquer ce que je veux dire. Je suis tombé sur un morceau de code similaire à celui qui suit en utilisant PrettyTensor API de Google, où il permet d'ajouter des fonctions personnalisées à la classe PrettyTensor grâce à son décorateur @ prettytensor.Register().Pourquoi les modules Python modifiés lors de l'exécution sont-ils conservés sur des fichiers séparés?
(situé dans custom_ops.py)
import prettytensor as pt
@pt.Register(...)
def custom_foo(bar):
...
(situé dans main.py)
import prettytensor as pt
import custom_ops
x = pt.custom_foo(bar)
Ce code accède prettytensor par 2 fichiers séparés, et je ne comprends pas pourquoi les changements fait dans un fichier report à l'autre. Ce qui est également intéressant, c'est que l'ordre des importations n'a pas d'importance.
import custom_ops
import prettytensor as pt
x = pt.custom_foo(bar)
Le code ci-dessus fonctionne toujours correctement. J'aimerais avoir de l'aide pour trouver une explication à ce phénomène, car je n'ai trouvé nulle part de documentation à ce sujet. Il me semble que l'interpréteur python cache le module en mémoire, et lorsqu'il est modifié par le fichier custom_ops, il persiste dans l'interpréteur lorsqu'il est à nouveau importé. Si quelqu'un sait pourquoi cela arrive, comment l'empêcheriez-vous?
Je suis désolé, je ne comprends pas votre question. Quel est exactement le comportement inattendu? –
modules sont stockés globalement dans 'sys.modules', les imports dans des modules séparés se réfèrent identiquement au même objet module et donc les modifications sont persistantes –
@AnthonySottile oui, pour ajouter à cela, il n'est pas utile de considérer les modules comme des" fichiers " ". Les fichiers sont le code source qui, lorsqu'il est exécuté, crée des objets-modules.Ces objets existent en mémoire, pas dans les fichiers '.py'. –