Slide 1

Slide 1 text

“String intern” を知ってますか? 2022/10/14 @ PyCon JP 2022 LT

Slide 2

Slide 2 text

● 小門 照太 ○ https://portfolio.skokado.me/ ● 職種:インフラ / クラウドエンジニア ● 所属:株式会社RevComm ● Python, AWS, DevOps, … ● 小鳥+猫 自己紹介

Slide 3

Slide 3 text

(再掲) “String intern” を知ってますか? 2022/10/14 @ PyCon JP 2022 LT

Slide 4

Slide 4 text

クイズです

Slide 5

Slide 5 text

次のうち is による比較結果が True になるのはどれでしょう? クイズです

Slide 6

Slide 6 text

次のうち is による比較結果が True になるのはどれでしょう? クイズです

Slide 7

Slide 7 text

次のうち is による比較結果が True になるのはどれでしょう? ⇒Answer: 1, 2, 3 クイズです

Slide 8

Slide 8 text

次のうち is による比較結果が True になるのはどれでしょう? ⇒Answer: 1, 2, 3 ※補足 - Python 3.10.6 - 対話モードで実行する場合 - 右の記法では True クイズです

Slide 9

Slide 9 text

“String intern” なぜか

Slide 10

Slide 10 text

メモリー内の “隔離” されたテーブルに文字列の値のコピーを格納する仕組み What is “String intern” ?

Slide 11

Slide 11 text

メモリー内の “隔離” されたテーブルに文字列の値のコピーを格納する仕組み What is “String intern” ? 文字列 PyConJP が “intern” された

Slide 12

Slide 12 text

メモリー内の “隔離” されたテーブルに文字列の値のコピーを格納する仕組み メリット ● 値が同じ変数同士を比較する場合のパフォーマンス向上 ○ 文字列の値ではなくポインタで比較可能になるため What is “String intern” ?

Slide 13

Slide 13 text

しかし、メモリー使用量やオーバーヘッドのトレードオフがある。 そのため「全ての文字列を intern する」わけではない。 ⇒Python はいくつかのルールに基づいて intern を行う ※「いくつかのルール」のドキュメントは見つけられず … What is “String intern” ?

Slide 14

Slide 14 text

しかし、メモリー使用量やオーバーヘッドのトレードオフがある。 そのため「全ての文字列を intern する」わけではない。 ⇒Python はいくつかのルールに基づいて intern を行う ※「いくつかのルール」のドキュメントは見つけられず … What is “String intern” ?

Slide 15

Slide 15 text

intern を強制することが可能 sys.intern()

Slide 16

Slide 16 text

「長い文字列の比較」においてパフォーマンスが向上する 使いどころ

Slide 17

Slide 17 text

「長い文字列の比較」においてパフォーマンスが向上する 使いどころ

Slide 18

Slide 18 text

リンク ● String Interning in Python: A Hidden Gem That Makes Your Code Faster Appendix

Slide 19

Slide 19 text

Thank you !