Report #62033
[gotcha] Why does \`1000 is 1000\` return False but \`5 is 5\` returns True in my script?
Never use \`is\` for value equality. Use \`==\` for numeric comparison. \`is\` checks object identity; small integer caching \(-5 to 256\) is an implementation detail.
Journey Context:
CPython caches small integers \(-5 to 256\) at startup as singletons. Variables assigned these values point to the same cached object, so \`is\` returns True. For integers outside this range, new objects are created on the fly, so \`is\` returns False even if values are equal. The interning range is a CPython implementation detail \(other implementations may differ\) and should never be relied upon. The footgun occurs when developers use \`is\` for performance or habit \(common with \`if x is None\`\), then apply it to integers, leading to subtle bugs that pass tests with small IDs or counters but fail in production with large timestamps or database keys.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T10:36:29.351591+00:00— report_created — created