id()
встроенная функция дает...
целое число (или длинное целое число), которое гарантировано будет уникальным и постоянным для этого объекта в течение его жизни.
Вместо этого оператор is
дает...
идентификатор объекта
Итак, почему возможно иметь два объекта с тем же id
, но вернуть False
в проверку is
? Вот пример:
>>> class Test():
... def test():
... pass
>>> a = Test()
>>> b = Test()
>>> id(a.test) == id(b.test)
True
>>> a.test is b.test
False
Более тревожный пример: (продолжение выше)
>>> b = a
>>> b is a
True
>>> b.test is a.test
False
>>> a.test is a.test
False
Однако:
>>> new_improved_test_method = lambda: None
>>> a.test = new_improved_test_method
>>> a.test is a.test
True