La sémantique de l'instruction del
ne se prête pas vraiment à ce que vous voulez ici. del b
supprime simplement la référence à l'objet A
que vous venez d'instancier dans le cadre/dictionnaire de portée locale; cela ne provoque pas directement une opération sur l'objet lui-même. Si c'était la dernière référence à l'objet, alors le compte de référence tombant à zéro, ou le garbage collector rassemblant un cycle, peut libérer l'objet. Vous pouvez observer cela en ajoutant une méthode __del__
à l'objet ou en ajoutant un rappel weakref qui effectue les actions souhaitées.
Cependant, aucune de ces deux solutions ne semble être une bonne idée. Les méthodes __del__
empêchent le collecteur d'ordures de recueillir des cycles quelconques impliquant l'objet; et tandis que weakrefs ne souffrent pas de ce problème, dans les deux cas, vous pouvez être dans un environnement étrange (comme lors de l'arrêt du programme), ce qui peut rendre difficile la réalisation de ce que vous voulez accomplir. Si vous pouvez développer votre cas d'utilisation exact, il se peut qu'il existe une approche totalement différente pour atteindre votre objectif final, mais il est difficile de spéculer sur la base d'un exemple aussi général et limité.
Pas d'info vraiment assez pour constituer une réponse, mais ne pas oublier que ce ne soit pas effacé lorsque vous appelez 'del whatever', qui vient Enlève quoi que ce soit de ce qu'il pointe, il n'est supprimé que lorsqu'il n'y a plus de références à l'objet. – richo