Любопытно:
>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False
Кажется, что a is b
более или менее определен как id(a) == id(b)
. Легко сделать ошибки следующим образом:
basename, ext = os.path.splitext(fname)
if ext is '.mp3':
# do something
else:
# do something else
Некоторые псевдонимы неожиданно оказались в блоке else. Исправить это просто, мы должны использовать ext == '.mp3'
вместо этого, но тем не менее if ext is '.mp3'
на поверхности кажется хорошим питоновским способом написать это и более читаемым, чем "правильным" способом.
Так как строки неизменяемы, каковы технические детали того, почему это неправильно? Когда проверка подлинности лучше, а когда проверка равенства лучше?