Une plongée dans la gestion mémoire de Python

Beaucoup de programmeurs Python pensent que l'exécution de del objet supprime toujours un objet.

Mais ce n'est PAS vrai.

❝

Un peu de contexte…

La méthode magique __del__ est utilisée pour définir le comportement lorsqu'un objet est sur le point d'être détruit par l'interpréteur Python.

Cependant, il peut parfois être nécessaire de définir des actions de nettoyage additionnelles pour un objet.

Cela peut être réalisé en utilisant la méthode __del__.

Cette méthode est invoquée automatiquement juste avant que la mémoire d'un objet ne soit libérée.

Ainsi, en définissant cette méthode dans ta classe, tu peux ajouter une fonctionnalité personnalisée lors de la suppression d'un objet.

Comme montré à la ligne 5, la suppression de l'objet n'a rien affiché de ce qui était spécifié dans __del__.

Cela signifie que l'objet n'a pas été supprimé.

Mais un résultat a bien été produit la seconde fois (lignes 7-8).

Pourquoi cela se produit-il ?

Lorsque nous exécutons del var :

  • Python ne supprime pas toujours l'objet

  • À la place, il supprime le nom var de la portée courante

  • Enfin, il réduit de 1 le nombre de références vers cet objet

C'est UNIQUEMENT lorsque le nombre de références vers un objet devient 0 que l'objet est supprimé.

Par conséquent, __del__ est exécuté.

Note : Ce comportement est fondamental pour comprendre la gestion de la mémoire en Python.

L'objet est supprimé lorsque les références deviennent nulles

L'objet est supprimé lorsque les références deviennent nulles

Cela explique le comportement du code précédent, je te le remets ci-dessous.

Explication du comportement de del de Python

Lorsque nous avons supprimé la première référence (del objectA), l'objet était toujours référencé par objectB.

À ce moment-là, le nombre de références vers cet objet n'était donc pas nul.

Mais après la suppression de la seconde référence (del objectB), Python n'avait plus aucune référence vers l'objet.

Résultat : la méthode magique __del__ a été appelée.

À retenir…

❌ del var n'appelle pas toujours __del__ et ne supprime pas nécessairement l'objet.

✅ Voici ce qu'il fait réellement :

  1. Il supprime le nom de variable (var) de la portée courante

  2. Il réduit de 1 le compteur de références de l'objet

  3. Si le compteur atteint zéro, l'objet est supprimé (et __del__ est alors exécuté)

👉🏼 À toi : Quelles autres idées reçues sur Python te semblent importantes à clarifier ?

Envie d'aller plus loin ? DataXp t'attend : formations et parcours pour progresser en data science, machine learning et IA.

Commentaires

Avatar

ou participer

Avatar

MEDJI medji1 year ago

Bonjour, " À toi : Quelles autres idées reçues sur Python te semblent importantes à clarifier ?"

Immuabilité : Les tuples sont immuables, ce qui signifie que leurs éléments ne peuvent pas être modifiés une fois qu'ils ont été créés. Cette caractéristique garantit que les données stockées dans un tuple restent constantes, ce qui peut être utile dans certaines situations où la cohérence des données est cruciale.

Hors dans ce bout de code le tuple est modifié après sa création:

B=[1,2,3] A = (2,B) print(A) B.append("aaa") print(A)

Cordialement

Avatar
Avatar

MEDJI medji1 year ago

Effectivement le cas avait déjà été traité. Merci

À lire ensuite

Des shots dans la même veine, à lire entre deux tâches.

Voir tous les shots
caret-right