Форум сайта python.su
0
Python 3.4 or 3.6
k = tuple(a for a in ()) r = tuple() k is () # False. Unbelivable. Please help me to understand this "False". r is () # True type(k) is type(r) # True k == () == r # True
Отредактировано Vjatcheslav (Сен. 3, 2018 17:39:26)
Офлайн
221
Кратко: Это оптимизация интерпретатора.
Подробно: Эти объекты равны по содержанию (оператор ==), но не являются идентичным объектом (оператор is)
>>> id(()) 4524154952 >>> id(()) 4524154952 >>> id(tuple(a for a in ())) 4527142808 >>> id(tuple(a for a in ())) 4527142760 >>> id(tuple(a for a in ())) 4527142808
>>> id(-100)значение выражения tuple() также закэшировано. Однако выражение tuple(a for a in ()) это совсем другое выражение, которое порождает новый объект. Несмотря на то что это тоже пустой кортеж, он не является тем же самым объектом.
4527149936
>>> id(-100)
4527150192
>>> id(-1)
4523588912
>>> id(-1)
4523588912
Офлайн