Это из-за деталей реализации - вы не можете полагаться на is
, возвращающую True
в целом. Попробуйте этот скрипт:
x = 'test'
y = 'test'
print('%r: \'x == y\' is %s, \'x is y\' is %s' % (x, x == y, x is y))
x = 'testtest'
y = 'testtest'
print('%r: \'x == y\' is %s, \'x is y\' is %s' % (x, x == y, x is y))
for i in range(1, 100):
x = 'test' * i
y = 'test' * i
print('%d: %r: \'x == y\' is %s, \'x is y\' is %s' % (i, x, x == y, x is y))
if x is not y:
break
Это печатает
'test': 'x == y' is True, 'x is y' is True
'testtest': 'x == y' is True, 'x is y' is True
1: 'test': 'x == y' is True, 'x is y' is True
2: 'testtest': 'x == y' is True, 'x is y' is False
На Jython is
возвращает False
даже в первом отпечатке.