답변:
3.0 이전의 Python 버전에는 "일반 문자열"과 "유니 코드 문자열"이라는 두 종류의 문자열이 있습니다. 일반 문자열 ( str
)은 라틴 알파벳 이외의 문자를 나타낼 수 없습니다 (단순화를 위해 코드 페이지의 세부 사항은 무시). 유니 코드 문자열 ( unicode
)은 Klingon과 같은 가상의 문자를 포함하여 모든 알파벳의 문자를 나타낼 수 있습니다.
그렇다면 두 종류의 문자열이있는 이유는 모든 경우를 다루기 때문에 유니 코드를 갖는 것이 낫지 않습니까? 글쎄, 유니 코드 만 갖는 것이 낫지 만 유니 코드가 문자열을 나타내는 데 선호되는 방법 전에 파이썬이 만들어졌습니다. 많은 사용자가있는 언어에서 문자열 유형을 전환하는 데 시간이 걸리며, Python 3.0에서는 모든 문자열이 유니 코드 인 경우가 있습니다.
3.0 이전의 Python 문자열의 상속 계층 구조는 다음과 같습니다.
object
|
|
basestring
/ \
/ \
str unicode
파이썬 2.3에서 소개 된 'basestring'은 객체가 인스턴스인지 str
또는 인스턴스인지를 확인하는 데 사용될 수 있으므로 문자열 통합 방향의 단계로 생각할 수 있습니다.unicode
>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
basestring
와 str
와 bytes
모두 서브 클래스를 object
직접. 그러나 Py2 str
는 Py3과 같지 않기 때문에 이것은 의미 가 bytes
있습니다. basestring
"문자열"로 생각해야하며, Py3에는 str
. 따라서 2to3
공구가로 대체 basestring
됩니다 str
.
str
와byte
의 여전히 아이들은basestring
? 이것에 대한 메모를 추가 할 가치가 있습니다.