When does Python create new list objects for empty lists?
The following makes sense to me: >>> [] is [] False Given that lists are mutable, I would expect [] to be a new empty list object every time it appears in an expression. Using this explanation however, the following surprises me: id([]) == id([]) True Why? What is the explanation? In the first example, [] is not [] precisely because the lists are mutable. If they weren't, they could safely map to the same one without issue. In the second example, id([]) creates a list, gets the id, and deallocates the list. The second time around it creates a list again , but "puts it in the same place"