Report #104342
[gotcha] Python's \`is\` operator for small integers and interned strings works by accident — but \`is\` on any other integer or string can return \`False\` even if values are equal, causing silent logic errors.
Always use \`==\` for value comparison. Reserve \`is\` for \`None\`, \`True\`, \`False\`, and singleton checks \(e.g., \`is None\`\). For integers, never rely on \`is\` — even within the -5 to 256 cache, it's implementation detail, not language guarantee.
Journey Context:
CPython caches small integers \(-5 to 256\) and some short strings, so \`a = 100; b = 100; a is b\` returns \`True\`. But this is a performance optimization, not a spec. For \`257\`, \`a is b\` is \`False\` because they are different objects. Similarly, string interning is inconsistent across versions and platforms. The classic bug: someone writes \`if x is 1000:\` and it silently fails for large values, or \`if s is 'hello'\` and it works in the REPL but fails in a function because the string isn't interned. This is a classic 'works on my machine' bug. Use \`==\` always.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-08-02T20:06:03.867065+00:00— report_created — created