Je veux qu'une classe Roach "meure" lorsqu'elle atteint un certain niveau de "faim", mais je ne sais pas comment supprimer l'instance. Je fais peut-être une erreur avec ma terminologie, mais ce que je veux dire, c'est que j'ai une tonne de "cafards" sur la fenêtre et je veux que certains spécifiques disparaissent complètement.
Je vous montrerais le code, mais c'est assez long. J'ai la classe Roach ajoutée à une liste de population de gardons de classes Mastermind.
En général:
il existe plusieurs façons habituelles de diminuer la référence (objet de déréférence -> liaison de variable):
del variable
supprimera également la référence dans le contexte actuelune fois que toutes les références à un objet ont été supprimées (compteur == 0), il devient un bon candidat pour le garbage collection, mais il n'est pas garanti qu'il sera traité ( référence ici ):
CPython utilise actuellement un schéma de comptage de références avec (facultatif) détection retardée des ordures liées cycliquement, qui collecte la plupart des objets dès qu'ils deviennent inaccessibles, mais il n'est pas garanti de collecter les ordures contenant des références circulaires. Voir la documentation du module gc pour des informations sur le contrôle de la collecte des ordures cycliques. D'autres implémentations agissent différemment et CPython peut changer. Ne dépendez pas de la finalisation immédiate des objets lorsqu'ils deviennent inaccessibles (ex: toujours fermer les fichiers).
combien de références sur l'objet existe, utilisez sys.getrefcount
module pour configurer/vérifier la récupération de place est gc
GC appellera la méthode object .__ del __ lors de la destruction de l'objet ( référence supplémentaire ici )
certains objets immuables comme les chaînes sont traités d'une manière spéciale - par ex. si deux variables contiennent la même chaîne, il est possible qu'elles référencent le même objet, mais d'autres pas - vérifiez identifiant les objets, pourquoi la valeur renvoyée par id (...) change-t-elle?
id d'objet peut être trouvé avec la fonction intégrée id
module memory_profiler semble intéressant - Un module pour surveiller l'utilisation de la mémoire d'un programme python
il y a beaucoup de ressources utiles pour le sujet, un exemple: Trouver toutes les références à un objet en python
Vous ne pouvez pas forcer un Python à supprimer; il sera supprimé lorsque rien ne le référencera (ou lorsqu'il se trouvera dans un cycle uniquement désigné comme étant les éléments du cycle). Vous devrez dire votre "Mastermind" pour effacer sa référence.
del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
if roach.hunger == 100
del roachpopulation_list[i]
break
Supprimez l'instance en la supprimant de votre liste de population (contenant toutes les instances de gardon.
Si vos cafards sont des sprites créés dans Pygame, une simple commande de .kill supprimerait l'instance.