Python sys.intern ()

sys.intern () gibt die "gleiche" Zeichenfolge in der Ausführungsumgebung für die "äquivalente" Zeichenfolge mit demselben Inhalt zurück. Die zurückgegebenen Zeichenfolgen stimmen jetzt mit "is" anstelle von "==" überein.

Mit sys.intern () sollten Sie mit erheblichen Beschleunigungen rechnen können, insbesondere wenn die Zeichenfolge lang ist. Ein Beispiel ist unten gezeigt.

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')

Ein Beispiel für die Ausführung in Python 3.6.2 wird gezeigt.

$ 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

Es ist ersichtlich, dass "comp2 (ia, ib)" schneller ist als "comp1 (a, b)". Außerdem scheint == erwartungsgemäß um O (n) langsamer zu sein als die Größe, während is O (1) ist.

Übrigens ist das Ergebnis von "comp1 (ia, ib)" ("ia == ib") ebenfalls schnell genug, aber es ist ungefähr 10 ms weniger als "comp2 (ia, ib)" ("ia ist ib"). langsam. Ist es ein Wenn-Zweig oder so?

Nachtrag (01.09.2017): Der Inhalt wurde mit Python 3.6.2 korrigiert. Nachtrag (04.09.2017): Der Text wurde ein wenig korrigiert.

Recommended Posts

Python sys.intern ()
Python
Kafka Python
Python-Grundlagen ⑤
Python-Zusammenfassung
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Python studieren
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Python-Tipps
Python-Funktion ①
Python-Grundlagen
Python-Memo
Ufo-> Python (3)
Python-Einschlussnotation
Installieren Sie Python
Python Singleton
Python-Grundlagen ④
Python-Memorandum 2
Python-Memo
Python Jinja2
Python-Inkrement
atCoder 173 Python
[Python] -Funktion
Python-Installation
Versuchen Sie Python
Python-Memo
Python iterativ
Python2 + word2vec
Python-Funktionen
Python-Tutorial
Python-Fraktion
Python Underbar Das ist was
Python-Zusammenfassung
Starten Sie Python
[Python] Sortieren
Hinweis: Python
Python-Grundlagen ③
Python-Protokoll ausgeben
Python-Grundlagen
[Scraping] Python-Scraping
Python-Update (2.6-> 2.7)
Python-Memo
Python-Memorandum
Python #sort
Ufo-> Python
Python nslookup
Python lernen
[Rpmbuild] Python 3.7.3.
Prorate Python (1)
Python Memorandum
Laden Sie Python herunter
Python Memorandum
Python-Memo