Why is the order in dictionaries and sets arbitrary?

Note: This answer was written before the implementation of the dict type changed, in Python 3.6. Most of the implementation details in this answer still apply, but the listing order of keys in dictionaries is no longer determined by hash values. The set implementation remains unchanged. The order is not arbitrary, but depends on the … Read more

Accessing class variables from a list comprehension in the class definition

Class scope and list, set or dictionary comprehensions, as well as generator expressions do not mix. The why; or, the official word on this In Python 3, list comprehensions were given a proper scope (local namespace) of their own, to prevent their local variables bleeding over into the surrounding scope (see List comprehension rebinds names … Read more

How is Python’s List Implemented?

The C code is pretty simple, actually. Expanding one macro and pruning some irrelevant comments, the basic structure is in listobject.h, which defines a list as: typedef struct { PyObject_HEAD Py_ssize_t ob_size; /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ PyObject **ob_item; /* ob_item contains space for ‘allocated’ elements. The number … Read more

What is the global interpreter lock (GIL) in CPython?

Python’s GIL is intended to serialize access to interpreter internals from different threads. On multi-core systems, it means that multiple threads can’t effectively make use of multiple cores. (If the GIL didn’t lead to this problem, most people wouldn’t care about the GIL – it’s only being raised as an issue because of the increasing … Read more

Why is ‘x’ in (‘x’,) faster than ‘x’ == ‘x’?

As I mentioned to David Wolever, there’s more to this than meets the eye; both methods dispatch to is; you can prove this by doing min(Timer(“x == x”, setup=”x = ‘a’ * 1000000″).repeat(10, 10000)) #>>> 0.00045456900261342525 min(Timer(“x == y”, setup=”x = ‘a’ * 1000000; y = ‘a’ * 1000000″).repeat(10, 10000)) #>>> 0.5256857610074803 The first can … Read more