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
С чего начать, чтобы понять первый фолс? Как разобраться?
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
>>> 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