Weekly backup.
This commit is contained in:
64
20220501153651-interning_optimization.org
Normal file
64
20220501153651-interning_optimization.org
Normal file
@@ -0,0 +1,64 @@
|
||||
:PROPERTIES:
|
||||
:ID: c0d562c7-9d2f-4f35-b7b1-f6b6ca5273f9
|
||||
:mtime: 20220501162112
|
||||
:ctime: 20220501153651
|
||||
:END:
|
||||
#+title: Interning optimization
|
||||
|
||||
* Introduction
|
||||
* Concerne /CPython/,
|
||||
* Consiste en la *réutilisation* d'objet plutôt que d'en recrééer.
|
||||
|
||||
* Integer interning
|
||||
* Au démarrage, /CPython/ pré-charge en mémoire les entiers de *-5 à 256*,
|
||||
* A chaque fois qu'un entier compris dans cet intervalle est utilisé, celui-ci fait référence à un entier pré-chargé.
|
||||
#+BEGIN_SRC python :results output
|
||||
a = 100
|
||||
b = 100
|
||||
|
||||
print(f'Memory address of a: {id(a)}')
|
||||
print(f'Memory address of b: {id(b)}')
|
||||
print(f'a is b: {a is b}')
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
: Memory address of a: 9792128
|
||||
: Memory address of b: 9792128
|
||||
: a is b: True
|
||||
|
||||
* String interning
|
||||
* Au démarrage, /CPython/ pré-charge en mémoire les chaines de caractères présentes dans le code et de longueur *<=
|
||||
4096*,
|
||||
* Il est possible de forcer le pré-chargement en mémoire d'une chaine à l'aide de ~sys.intern~
|
||||
|
||||
#+BEGIN_SRC python :results output
|
||||
from random import choice
|
||||
from string import printable
|
||||
from sys import intern
|
||||
|
||||
a = "Data"
|
||||
b = "Data"
|
||||
|
||||
print(f'Memory address of a: {id(a)}')
|
||||
print(f'Memory address of b: {id(b)}')
|
||||
print(f'a is b: {a is b}')
|
||||
|
||||
c = intern(''.join(choice(printable) for _ in range(4097)))
|
||||
d = c
|
||||
|
||||
print(f'Memory address of c: {id(c)}')
|
||||
print(f'Memory address of d: {id(d)}')
|
||||
print(f'c is d: {c is d}')
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
: Memory address of a: 139629084500336
|
||||
: Memory address of b: 139629084500336
|
||||
: a is b: True
|
||||
: Memory address of c: 28459264
|
||||
: Memory address of d: 28459264
|
||||
: c is d: True
|
||||
|
||||
* Références
|
||||
* [[https://pythonsimplified.com/optimization-in-python-interning/][Optimization in Python — Interning - pythonsimplified]]
|
||||
* [[https://stackoverflow.com/questions/55347581/why-does-the-is-operator-behave-differently-in-a-script-vs-the-repl][Why does the `is` operator behave differently in a script vs the REPL? - Stack-Overflow]]
|
Reference in New Issue
Block a user