Est-il un moyen de supprimer créé des variables, des fonctions, etc à partir de la mémoire de l'interprète?
J'ai été la recherche de la réponse exacte à cette question pour un couple de jours maintenant, mais n'ai rien de bon. Je ne suis pas un débutant en programmation, mais pas encore au niveau intermédiaire.
Quand je suis dans le shell Python, j'type: dir()
et je peux voir tous les noms de tous les objets dans le champ d'application actuel (bâtiment principal), il y a 6 d'entre eux:
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
Puis, quand je suis à la déclaration d'une variable, par exemple x = 10
, il ajoute automatiquement pour que les listes d'objets en vertu de l'intégré dans le module dir()
, et quand je tape dir()
encore une fois, il montre maintenant:
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
Il en va de même pour les fonctions, les classes, et ainsi de suite.
Comment puis-je supprimer tous les nouveaux objets sans effacement de la norme 6, qui lorsqu'ils sont disponibles dès le début?
J'ai lu ici sur "la mémoire de nettoyage", "nettoyage de la console", qui efface tout le texte à partir de la fenêtre d'invite de commande:
>>> import sys
>>> clear = lambda: os.system('cls')
>>> clear()
Mais tout cela n'a rien à voir avec ce que je suis en train de réaliser, il n'a pas de nettoyer tous les objets utilisés.
- Pourquoi avez-vous besoin de faire cela, ou êtes-vous juste d'avoir de la curiosité?
- Je ne savais pas qu'il y est un
del
fonction de là-bas. Je commence à apprendre le langage Python et souvent d'expérience dans la coque, de façon standard, les noms de variables commex
ouy
sont souvent déjà en cours d'utilisation et le redémarrage de la coquille prend une autre de 15 secondes à faire (j'ai un très, très vieux portable maintenant). Je voulais donc trouver un moyen de nettoyer Python de la mémoire plus rapide. - Ah. FWIW,
del
n'est pas exactement une fonction, donc pas de(
et)
. C'est un mot clé qui introduit une del déclaration. Bien sûr, comment il fait supprime un objet peut impliquer des fonctions, mais c'est une autre histoire... - Lors de l'expérimentation dans la coquille des noms comme
x
ouy
ne doit pas être utilisé à moins que vous les utilisez. Ou à moins que vous faire quelque chose de stupide commefrom _somemodule_ import *
, alors vous aurez toutes sortes d'ordures qui encombrent la place. 🙂 - Double Possible de Comment puis-je effacer toutes les variables au moyen d'un script Python?
- Je pense que les réponses à mes questions sont les meilleurs, parce qu'ils contiennent des informations supplémentaires et sont beaucoup plus simples que celles prévues pour la question référencés. Est-il encore être considéré comme un doublon et enlevée, même si les réponses sont les meilleures? Je vous remercie.
- J'ai googlé mon chemin à cette question et maintenant je me demande - pourquoi ne puis-je pas juste redémarrer le noyau et ré-exécutez le script à partir du haut si je veux supprimer toutes les variables et les fonctions de toute façon?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez supprimer le nom de l'individu avec
del
:ou vous pouvez les supprimer de la
globals()
objet:C'est juste un exemple de boucle; il, sur la défensive ne supprime que le nom ne commence pas par un caractère de soulignement, de faire une (pas irraisonnés) hypothèse que vous ne l'utilisiez les noms sans un trait de soulignement au début de votre interprète. Vous pouvez utiliser une liste codée en dur de noms de garder la place (liste blanche) si tu voulais vraiment être approfondie. Il n'existe pas de fonction intégrée pour faire de la compensation pour vous, autre que de simplement quitter et redémarrer l'interprète.
Modules que vous avez importées (
import os
) vont rester importés parce qu'ils sont référencés parsys.modules
; par la suite, les importations de réutilisation de la déjà importé le module objet. Vous juste de ne pas avoir une référence dans votre espace de noms global.startswith('_')
semble tout à fait naïf. Si quelqu'un est assez intelligent pour écrire_foo=42
ou même__foo__=42
, comment peut-on les supprimer? Est-il possible d'obtenir le module standard noms des propriétés par programmation?dir(ModuleType())
, mais il ne renvoiedoc
etname
.del
il. Et si l'espace de noms est trop encombré, j'ai simplement tuer l'interprète & de le redémarrer.__builtins__
, que vous pouvez obtenir avec unexec
, c'est à direm = types.ModuleType(''); exec('', vars(m)); dir(m)
.__package__
(qui est lié àNone
, donc pas un gros problème). Je ne veux pas défendre l'approche que les différentes versions de Python peut introduire d'autres noms qui ne sont pas récupérables par le biais de ce processus; il n'est tout simplement pas assez fiable.sys.modules['__main__']
ici; interactive interprète de l'espace de noms.Oui. Il y a un moyen simple de supprimer tout dans iPython.
Dans iPython de la console, il suffit de taper:
Ensuite, le système vous demandera de confirmer. Appuyez sur y.
Si vous ne voulez pas voir ce message, il suffit de taper:
Cela devrait fonctionner..
Vous pouvez utiliser python garbage collector:
Si vous êtes dans un environnement interactif, comme
Jupyter
ouipython
vous pourriez être intéressé par de compensation indésirables var si elles sont de plus en plus lourd.La magie-commandes
reset
etreset_selective
est disponible sur interactive python sessions commeipython
etJupyter
1)
reset
in
et laout
paramètres, spécifiez si vous voulez vider le in/out caches. Le répertoire de l'histoire est rincée avec de l'dhist
paramètre.Un autre élément intéressant est
array
qui supprime uniquement les Tableaux numpy:2) reset_selective
Propre Exemple Du Tableau:
Source: http://ipython.readthedocs.io/en/stable/interactive/magics.html
Cela a fonctionné pour moi.
Vous devez l'exécuter deux fois, une fois pour globals suivie par les habitants
Effectivement python va récupérer la mémoire qui n'est pas en utiliser plus.Ceci est appelé la collecte des ordures qui est processus automatique en python. Mais si vous voulez le faire vous pouvez le supprimer en
del variable_name
. Vous pouvez aussi le faire par l'affectation de la variable àNone
Le seul moyen de récupérer de la mémoire de non référencées objets Python est par le garbage collector. Le mot-clé del de simplement se délie un nom à partir d'un objet, mais l'objet doit toujours être nettoyée. Vous pouvez forcer le garbage collector à exécuter à l'aide de la gc module, mais ce n'est presque certainement une optimisation prématurée, mais il a ses propres risques. À l'aide de
del
n'a pas d'effet réel, puisque ces noms auraient été supprimés, car ils sont allés hors de portée de toute façon.del
ne avoir un effet réel ici.