Почему id ({}) == id ({}) и id ([]) == id ([]) в CPython?

Почему CPython (не знаю о других реализациях Python) имеет следующее поведение?

tuple1 = ()
tuple2 = ()                                                                                                   
dict1 = {}
dict2 = {}
list1 = []
list2 = []
# makes sense, tuples are immutable
assert(id(tuple1) == id(tuple2))
# also makes sense dicts are mutable
assert(id(dict1) != id(dict2))
# lists are mutable too
assert(id(list1) != id(list2))
assert(id(()) == id(()))
# why no assertion error on this?
assert(id({}) == id({}))
# or this?
assert(id([]) == id([]))

У меня есть несколько идей, почему он может , но не могу найти конкретная причина.

РЕДАКТИРОВАТЬ

Чтобы дополнительно доказать точку зрения Гленна и Томаса:

[1] id([])
4330909912
[2] x = []
[3] id(x)
4330909912
[4] id([])
4334243440
26
задан Ashwini Chaudhary 5 October 2014 в 09:36
поделиться