2010-07-22 3 views
2

어딘가에 (내가 생각하기에, 어쩌면 다른 곳에서도), 파이썬이 자동으로 단일 문자열을 참조하므로, 'a' == 'a'이 아니라 'a' is 'a'을 읽습니다.파이썬에서 단일 문자 문자열이 동일하다는 보장이 있습니까?

그러나 이것이 파이썬에서 동작을 보장하는지, 아니면 단지 구현에만 해당되는지는 기억하지 못합니다.

공식 출처에 대한 보너스 포인트.

+0

은 참고 : 동일한 컴파일 유닛 때 식별자 만 공유 아닌 문자열 http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is- 오류가 발생하는 경우가 있습니다. 이유는 무엇입니까? http://stackoverflow.com/questions/2987958/how-is-the-is-keyword-implemented-in-python – kriss

+3

왜 세계에서 그 사실을 알아야합니까? –

+0

주로 호기심. 그리고 다른 사람들 (특히 초보자)에게 그것이 언급 된 곳을 명확하게 말할 수 있기를 바란다. –

답변

14

구현에 따라 다릅니다. 이 (가 reference 말한대로) 때문에, 이야기하기는 어렵습니다 :

을 ... 실제로 동일한 유형 및 값으로 기존의 객체에 대한 참조를 반환 할 수 있습니다 새로운 값을 계산 불변의 종류, 작업에 가변을 위해 잠시 객체는 허용되지 않습니다.

는 인터프리터가 동일,하지만 항상 작동하지 않습니다 보장에 대한 꽤 좋은 :

x = u'a' 
y = u'abc'[:1] 
print x == y, x is y 

실행을 CPython의 2.6에,이 True False을 제공합니다.

+5

나는 확실히 모른다. 그러나 결코 그것에 의존하지 않을 것이다. – delnan

+0

그 이유는 공식 (또는 적어도 평판이 좋은) 출처를 찾고 있기 때문입니다 : P –

+2

이 답안에서 주어진 예제는 당신이 * 의존 할 수 없다는 것을 증명합니다. +1 –

6

모든 구현이 정의됩니다.

인턴에 대한 문서는 "일반적으로 Python 프로그램에서 사용되는 이름은 자동으로 금지되며 모듈, 클래스 또는 인스턴스 속성을 저장하는 데 사용되는 사전에는 키가 저장되어 있습니다."

즉, 이름 일 수 있고 컴파일 타임에 알려진 모든 것이 동일한 이름의 다른 어커런스와 동일 할 가능성이 있지만 (보장되지는 않음) 의미합니다.

다른 문자열은 금지됩니다. 같은 컴파일 단위에 나타나는 상수 문자열을 함께 접혀 (그러나 그것은 또한 단지 구현 세부입니다) 그래서 당신은 얻을 :

>>> a = '!' 
>>> a is '!' 
False 
>>> a = 'a' 
>>> a is 'a' 
True 
>>> 

같은 문자열을 얻기도 다른 컴파일 그렇게 구금 된 식별자를 포함하는 문자열 .

>>> '!' is '!' 
True 
+0

그것은 마음이 부는 것입니다! – theycallmemorty

관련 문제