В python действительно все является объектом, включая 5;Вы можете отобразить id(5)
и type(5)
.
Однако для некоторых объектов идентичность не имеет значения, и вы заботитесь о них только для значения.Эти объекты должны быть неизменными.
Число - это объекты такого типа ... нам нет дела до 5 или 5;сама фраза не звучит логично.5 интересен только своим значением.
Для других объектов (особенно изменяемых) вы вместо этого сильно заботитесь об идентичности: этот список не тот список, даже если оба они пусты.
Хотяиспользование чего-то вроде
if x is y: ...
было бы очень плохой идеей в Python, если бы x
и y
были числами или строками, было бы вполне разумно, если бы, например, x
и y
были list
экземпляров.Проблема с идентификацией чисел состоит в том, что если x
и y
являются числами, и я пишу:
z1 = x + y
z2 = x + y
может быть z1
и z2
в конечном итоге будет одним и тем же объектом (т.е. id(z1) == id(z2)
и z1 is z2
возвращает True
) или может быть нет (т. е. id(z1) != id(z2)
и z1 is z2
возвращает False
).
Конечно, однако значение z1
и значение z2
будет таким же (т. е. z1 == z2
), и это то, что вас волнует при использовании чисел.