this question 및 its duplicate을 본 후에도 여전히 질문이 남아 있습니다. 내가Python 인터프리터 문자열 풀링 최적화
a = "ab"
b = "ab"
a == b
을 실행 내가 True
을받을 경우
내가 왜 is
및 ==
이 무엇을 얻을.
a = "ab"
b = "ab"
a is b # Returns True
그래서 나는 내 연구를하고 내가
this을 발견이 일이 왜 여기에 문제는
될 것이다. 대답은 파이썬 인터프리터가 문자열 풀링을 사용한다고 말합니다. 따라서 두 개의 문자열이 동일한 것으로 확인되면 최적화를 위해 새 문자열에 동일한 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에서 동일한 예제를 시도한 후에도 동일한 결과가 나타납니다.
질문 : 왜이 예에서는 문자열 풀링이 최적화되어 있지 않습니까? 파이썬이 이것을 최적화하는 것이 더 좋지 않을까요?
편집 : 나는 "a b" is "a b"
반환 True
를 실행합니다. 문제는 변수를 사용하면 일부 문자의 경우 False
을 반환하지만 다른 문자의 경우 True
을 반환하는 이유입니다.
파이썬 3.4.4 창 :'>>> A = "AB"는, 우분투 장 - FrançoisFabre의 python3.4.3는 'FALSE'를 반환 @ B = "AB"는 >>> A는 B TRUE ' –
입니다 –
python 3.5 windows 'ab'는 'a'가 'True'로 평가됩니다. –