После просмотра this question и its duplicate вопрос остался для меня.Python Interpreter String Оптимизация пула
я получаю то, что is
и ==
делать и почему, если я бегу
a = "ab"
b = "ab"
a == b
я True
. Вопрос здесь будет ПОЧЕМУ это происходит:
a = "ab"
b = "ab"
a is b # Returns True
Так что я сделал свое исследование, и я нашел this. Ответ говорит, что интерпретатор Python использует пул строк. Поэтому, если он видит, что две строки одинаковы, он присваивает то же самое id
новому для оптимизации.
До сих пор все в порядке и ответа. Мой реальный вопрос - почему этот пул происходит только для некоторых строк. Вот пример:
a = "ab"
b = "ab"
a is b # Returns True, as expected knowing Interpreter uses string pooling
a = "a_b"
b = "a_b"
a is b # Returns True, again, as expected knowing Interpreter uses string pooling
a = "a b"
b = "a b"
a is b # Returns False, why??
a = "a-b"
b = "a-b"
a is b # Returns False, WHY??
Так что, похоже, для некоторых символов пул строк не работает. Я использовал Python 2.7.6 для этих примеров, поэтому я думал, что это будет исправлено в Python 3. Но после того, как вы попытаетесь использовать те же примеры в Python 3, появятся те же результаты.
Вопрос: Почему оптимизатор строк не оптимизирован для этих примеров? Не лучше ли Python оптимизировать это?
Edit: Если я бегу "a b" is "a b"
возвращается True
. Вопрос в том, почему с помощью переменных он возвращает False
для некоторых символов, но True
для других.
питон 3.4.4 окна: '>>> а = "абы", б = "абы" >>> а есть б true' –
@ Жан-FrançoisFabre python3.4.3 на Ubuntu возвращает' false' –
python 3.5 windows ''ab' is 'a b'' оценивает' True' –