The internals of Python string interning

This article describes how Python string interning works in CPython 2.7.7.

A few days ago, I had to explain to a colleague what the built-in function intern does. I gave him the following example:

>>> s1 = 'foo!'
>>> s2 = 'foo!'
>>> s1 is s2
>>> s1 = intern('foo!')
>>> s1
>>> s2 = intern('foo!')
>>> s1 is s2

Porting ISAAC to Python

3 months ago, I discovered an algorithm called ISAAC on reddit. ISAAC (Indirection, Shift, Accumulate, Add, and Count) is a cryptographically secure pseudorandom number generator (CSPRNG) designed in 1996 by Bob Jenkins. It produces 32-bit unsigned integers uniformly distributed, unbiased, and unpredictable. Cycles are guaranteed to be a minimum of 240 values long and they are 28295 values long on average. The generator runs fast and performs 18.75 machine cycles on average .

I’ve wanted to write my first Python extension for a long time; the short C implementation combined with a simple API solely composed of two functions – one for initializing the generator, one for generating random numbers – made ISAAC a great candidate for this task.


Hello World!

I have been wanting to start a blog for a while… and it’s finally happening! In fact, I’m currently working on my first post about CPython string interning and I hope to publish it in a few days.

Meanwhile, I will leave you with two neat Python tricks I discovered last year in Raymond Hettinger’s PyCon talk: “Transforming Code into Beautiful, Idiomatic Python”.