파이썬 인터프리터 것이다 인턴 작은 문자열 리터럴을 생각하는 확인 작은 "은 구현에 따라 다름). 이것은 name1 is name2
이 True
인 이유입니다.이 두 이름은 같은 문자열 객체를 참조합니다.
CPython과 다른 구현체도 런타임 표현식의 결과를 포함하지 않으므로 실제로 문자열이 다른 객체가 필요한 경우 동적으로 작성할 수 있습니다. 예를 들어 : 방금 무슨 일이 일어날 지보고 실험을하고 있지만 이미 돌보는 문자열이 런타임 표현에서 오는 경우 한편
In [1]: prefix = 'ABC '
In [2]: a = prefix + 'D'
In [3]: b = prefix + 'D'
In [4]: a is b
Out[4]: False
, 당신은 특별한 아무것도 할 필요가 없습니다.
어쨌든, 인턴 문자열은 구현 세부 사항입니다. 사용 사례에 따라 개체의 ID가 항상 다른지 확인해야하는 경우 사용자 지정 클래스를 사용해야합니다. 예를 들어 :
class Marker(str):
__slots__ =()
이것은 아마도 예상대로 작동합니다
In [6]: Marker('ABC D')
Out[6]: 'ABC D'
In [7]: Marker('ABC D') is Marker('ABC D')
Out[7]: False
In [8]: Marker('ABC D') == Marker('ABC D')
Out[8]: True
당신이 사전의 키로서 개체를 사용할 계획하고 별개의 객체가 개별의 키가 될 것으로 기대하지 않는. 그러나이 경우 일반 문자열은 작동하지 않습니다.
아마도 문자열 리터럴은 다른 방식으로 처리됩니다. 두 개의 객체로 시도하십시오 ... –
문자열은 파이썬에서 불변하므로 재사용 할 수 없습니다. – Matthias
또한 파이썬에서 문자열 풀링에 대해 참조하십시오 : http://stackoverflow.com/questions/2519580/are-strings-pooled-in-python – pajton