Why does tuple(set([1,”a”,”b”,”c”,”z”,”f”])) == tuple(set([“a”,”b”,”c”,”z”,”f”,1])) 85% of the time with hash randomization enabled?

I’m going to assume any readers of this question to have read both: Zero Piraeus’ answer and My explanation of CPython’s sets. The first thing to note is that hash randomization is decided on interpreter start-up. The hash of each letter will be the same for both sets, so the only thing that can matter … Read more

Why (0-6) is -6 = False? [duplicate]

All integers from -5 to 256 inclusive are cached as global objects sharing the same address with CPython, thus the is test passes. This artifact is explained in detail in http://www.laurentluce.com/posts/python-integer-objects-implementation/, and we could check the current source code in http://hg.python.org/cpython/file/tip/Objects/longobject.c. A specific structure is used to refer small integers and share them so access … Read more

Why is it slower to iterate over a small string than a small list?

TL;DR The actual speed difference is closer to 70% (or more) once a lot of the overhead is removed, for Python 2. Object creation is not at fault. Neither method creates a new object, as one-character strings are cached. The difference is unobvious, but is likely created from a greater number of checks on string … Read more

How is set() implemented?

According to this thread: Indeed, CPython’s sets are implemented as something like dictionaries with dummy values (the keys being the members of the set), with some optimization(s) that exploit this lack of values So basically a set uses a hashtable as its underlying data structure. This explains the O(1) membership checking, since looking up an … Read more

Why are some float < integer comparisons four times slower than others?

A comment in the Python source code for float objects acknowledges that: Comparison is pretty much a nightmare This is especially true when comparing a float to an integer, because, unlike floats, integers in Python can be arbitrarily large and are always exact. Trying to cast the integer to a float might lose precision and … Read more

Python vs Cpython

So what is CPython? CPython is the original Python implementation. It is the implementation you download from Python.org. People call it CPython to distinguish it from other, later, Python implementations, and to distinguish the implementation of the language engine from the Python programming language itself. The latter part is where your confusion comes from; you … Read more