Résolue

Mise en cache forcée pour d'autres types d'objet en Python

# Python # Module sys

En creusant un peu sur Internet, j'ai cru comprendre que l'équivalent du mécanisme de small integer caching s'appelait string interning pour les chaines de caractères. J'ai également découvert qu'on pouvait utiliser la fonction sys.intern() pour forcer Python à utiliser ce mécanisme sur les chaines de caractères.

Ma question est : existe-il une fonction similaire pour forcer la mise en cache des autres type d'objet comme un int ou un float par exemple ?

Gabriel Trouvé

Mentor

Bonsoir,

Effectivement, pour les entiers (int), Python applique un mécanisme d'internement automatique appelé small integer caching. Ce cache concerne les entiers de -5 à 256

Par contre pour les float tu n'as pas ce mécanisme.

Tu peux aussi mettre en cache les résultats d'appel à une fonction : https://docs.python.org/fr/3.10/library/functools.html#functools.lru_cache. Mais bon, là c'est encore autre chose :)

Merci pour les précisions.

Et autre question du coup. J'ai remarqué que le small integer caching ne fonctionnait pas de la même manière lorsque je suis dans un interpréteur Python et lorsque je suis dans un fichier .py.

Est ce que c'est Python qui essaye d'optimiser mes fichiers .py en mettant en "cache" des entiers de mon code, même lorsqu'il sont en dehors de la plage -5 : 256 ?

Gabriel Trouvé

Mentor

Oui, alors en fait, de tête Python est capable d'optimiser les fichiers hors de la page standard c'est pour ça. Ce que tu ne retrouves pas sur un interpréteur. Je me suis posé la même question il y a deux ans ahah

Merci pour les précisions.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.