The C library is fetching, allocating memory from the system and then caching it for later reuse once it's no longer in use. And above that, you've got the Python allocator doing the same thing. The key here is the focus. Like the algorithm that malloc follows is generic. It doesn't know what you're going to do but will be trying to make it as fast as possible for all possible cases. This means a huge amount of objects are being created and destroyed very fast.