Из того, что мне было известно, используя [], {} или () для создания экземпляров объектов, возвращает новый экземпляр list, dict или tuple соответственно; новый объект экземпляра с новым идентификатором.
Это было довольно ясно для меня, пока я не протестировал его, и я заметил, что () is () фактически возвращает True вместо ожидаемого False:
>>> () is (), [] is [], {} is {}
(True, False, False)
 как и ожидалось, это поведение также проявляется при создании объектов с list(), dict() и tuple() соответственно:
>>> tuple() is tuple(), list() is list(), dict() is dict()
(True, False, False)
Единственная релевантная часть информации, которую я мог найти в в документах для tuple():
[...] Например,
tuple('abc')возвращает('a', 'b', 'c')иtuple([1, 2, 3])возвращает(1, 2, 3). Если аргумент не задан, конструктор создает новый пустой кортеж,().
Достаточно сказать, этого недостаточно для ответа на мой вопрос.
Итак, почему пустые кортежи имеют одинаковый идентификатор, в то время как другие, подобные спискам или словарям, не работают?
