Найти - Пользователи
Полная версия: Как понять поведение питона при выполнении следующего кода
Начало » Python для новичков » Как понять поведение питона при выполнении следующего кода
1
Vjatcheslav
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


С чего начать, чтобы понять первый фолс? Как разобраться?
JOHN_16
Кратко: Это оптимизация интерпретатора.
Подробно: Эти объекты равны по содержанию (оператор ==), но не являются идентичным объектом (оператор 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)
4527149936
>>> id(-100)
4527150192
>>> id(-1)
4523588912
>>> id(-1)
4523588912
значение выражения tuple() также закэшировано. Однако выражение tuple(a for a in ()) это совсем другое выражение, которое порождает новый объект. Несмотря на то что это тоже пустой кортеж, он не является тем же самым объектом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB