Python >> Tutoriel Python >  >> Python

Comment obtenir le nombre de références actuel d'un objet en Python ?

Le nombre de références est le nombre de fois qu'un objet est référencé par une variable. Si un objet n'est plus référencé, il peut être supprimé en toute sécurité de la mémoire - à quoi sert un objet dont personne ne se soucie de toute façon ? Cet article vous montre comment compter le nombre de références à un objet Python.

Quel est le nombre de références actuel de l'objet Python

Question :Comment obtenir le nombre de références actuel d'un objet Python ?

Répondre  :Vous pouvez obtenir le nombre de références actuel avec le sys getrefcount() du module méthode. Par exemple, pour obtenir le nombre de fois la variable x est référencé, exécutez sys.getrefcount(x) .

Voici la stratégie générale pour un object arbitraire :

import sys
print(sys.getrefcount(object))

L'extrait de code suivant montre un exemple d'objet x qui a un nombre de références de 13. Après avoir créé une nouvelle référence y à l'objet x , le nombre de références augmente de un pour atteindre 14.

import sys


x = 42

print(sys.getrefcount(x))
# 13

y = x

print(sys.getrefcount(x))
# 14

Vous ne vous attendiez peut-être pas à ce que le nombre de références initial soit de 13. Alors, pourquoi cela ? Voyons.

Pourquoi le nombre de références est-il plus élevé que prévu ?

Raison 1 :variables d'assistance implicites

Python est un langage de programmation de haut niveau. Il vous offre de nombreuses fonctions pratiques et de gestion de la mémoire. Vous n'avez pas à vous soucier des emplacements de mémoire concrets de vos objets et Python effectue automatiquement le ramasse-miettes, c'est-à-dire en supprimant les objets inutilisés de la mémoire. Pour faire tout ce travail, Python s'appuie sur ses propres structures. Parmi celles-ci, il y a des variables d'assistance qui peuvent faire référence à un objet que vous avez créé. Tout cela se passe sous le capot, donc même si vous ne faites pas référence à un objet dans votre code, Python peut encore avoir créé de nombreuses références à cet objet. C'est pourquoi le nombre de références peut être plus élevé que prévu.

Raison 2 :Référence temporaire dans getrefcount()

Notez qu'en appelant la fonction getrefcount(x ), vous créez une référence temporaire supplémentaire à l'objet x . Cela seul augmente le compteur de référence de un.