Python Language Désallouer des objets avec force


Exemple

Vous pouvez forcer les objets de désaffectation même si leur refcount n'est pas 0 dans Python 2 et 3.

Les deux versions utilisent le module ctypes pour le faire.

AVERTISSEMENT: cela laissera faire votre environnement Python instable et enclin à s'écraser sans retraçage! L'utilisation de cette méthode peut également créer des problèmes de sécurité (très improbable). Déjà.

Python 3.x 3.0
import ctypes
deallocated = 12345
ctypes.pythonapi._Py_Dealloc(ctypes.py_object(deallocated))
Python 2.x 2.3
import ctypes, sys
deallocated = 12345
(ctypes.c_char * sys.getsizeof(deallocated)).from_address(id(deallocated))[:4] = '\x00' * 4

Après l'exécution, toute référence à l'objet maintenant désalloué entraînera un comportement ou un blocage indéfini de Python, sans trace. Il y avait probablement une raison pour laquelle le garbage collector n'a pas supprimé cet objet ...

Si vous désallouez None , vous obtenez un message spécial - Fatal Python error: deallocating None avant de planter.