Python sys.intern ()

sys.intern () renvoie la "même" chaîne de caractères dans l'environnement d'exécution pour la chaîne de caractères "équivalente" avec le même contenu. Les chaînes renvoyées correspondent désormais à ʻis au lieu de == `.

Vous devriez pouvoir vous attendre à des accélérations significatives avec sys.intern (), surtout si la chaîne est longue. Un exemple est présenté ci-dessous.

intern_test.py


import sys
import timeit

def comp1(a, b):
    return a == b

def comp2(a, b):
    return a is b

for n in [10000, 50000]:
    a = ''.join([str(s) for s in range(0, n)])
    b = ''.join([str(s) for s in range(0, n)])
    ia = sys.intern(a)
    ib = sys.intern(b)
    print("--{}--".format(n))
    print("comp1(a, b)", comp1(a, b),
          timeit.timeit("comp1(a, b)", globals=globals()), sep='\t')
    print("comp2(a, b)", comp2(a, b),
          timeit.timeit("comp2(a, b)", globals=globals()), sep='\t')
    print("comp1(ia, ib)", comp1(ia, ib),
          timeit.timeit("comp1(ia, ib)", globals=globals()), sep='\t')
    print("comp2(ia, ib)", comp2(ia, ib),
          timeit.timeit("comp2(ia, ib)", globals=globals()), sep='\t')

Un exemple d'exécution en Python 3.6.2 est présenté.

$ python intern_test.py
--10000--
comp1(a, b)     True    1.5900884549773764
comp2(a, b)     False   0.12032010598341003
comp1(ia, ib)   True    0.13831643099547364
comp2(ia, ib)   True    0.13083625899162143
--50000--
comp1(a, b)     True    11.056225399981486
comp2(a, b)     False   0.11997383600100875
comp1(ia, ib)   True    0.13671555201290175
comp2(ia, ib)   True    0.12875197199173272

On peut voir que «comp2 (ia, ib)» est plus rapide que «comp1 (a, b)». De plus, == semble être plus lent de O (n) que la taille attendue, tandis que ʻis` est O (1).

Au fait, le résultat de comp1 (ia, ib) (ʻia == ib) est également assez rapide, mais il est inférieur à 10ms par rapport à comp2 (ia, ib) (ʻia is ib). lent. Est-ce une branche if ou quelque chose?

Addendum (2017-09-01): Correction du contenu à l'aide de Python 3.6.2. Addendum (2017-09-04): Corrige un peu le texte.

Recommended Posts

Python sys.intern ()
Python
python kafka
Les bases de Python ⑤
Résumé Python
Python intégré
Notation d'inclusion Python
Technique Python
Étudier Python
Compte à rebours Python 2.7
Mémorandum Python
Python FlowFishMaster
Service Python
astuces python
fonction python ①
Les bases de Python
Mémo Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
Les bases de Python ④
Mémorandum Python 2
mémo python
Python Jinja2
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
Essayez Python
Mémo Python
Itératif Python
Python2 + mot2vec
Fonctions Python
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
[Python] Trier
Remarque: Python
Les bases de Python ③
Sortie du journal python
Les bases de Python
[Scraping] Scraping Python
Mise à jour Python (2.6-> 2.7)
mémo python
Mémorandum Python
Python #sort
ufo-> python
Python nslookup
apprentissage de python
[Rpmbuild] Python 3.7.3.
Python au prorata (1)
mémorandum python
Télécharger Python
mémorandum python
Mémo Python