Из того, что мне было известно, используя [], {}
или ()
для создания экземпляров объектов, возвращает новый экземпляр 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)
. Если аргумент не задан, конструктор создает новый пустой кортеж,()
.
Достаточно сказать, этого недостаточно для ответа на мой вопрос.
Итак, почему пустые кортежи имеют одинаковый идентификатор, в то время как другие, подобные спискам или словарям, не работают?