HOWTO · Python

파이썬에서 문자열 길이와 크기 얻기

이 자습서는 Python에서 문자열 길이를 가져 오는 방법을 보여줍니다.

이 페이지의 내용

Python 문자열의 요소 수를 구하려면 len(text)를 사용하세요. 문자열 객체 자체의 얕은 메모리 크기가 필요하면 sys.getsizeof(text)를 사용하세요. 두 측정값은 서로 다른 질문에 답합니다. 문자 수는 바이트 수가 아니며, 객체의 메모리 크기도 텍스트의 길이가 아닙니다.

len()로 문자열의 문자 수 구하기

내장 함수 len()는 문자열의 요소 수를 세는 일반적이고 효율적인 방법입니다. 문자와 숫자뿐 아니라 공백과 문장 부호도 포함해 셉니다. Python 문자열에서 각 요소는 유니코드 코드 포인트입니다. 따라서 결합 악센트가 붙은 문자나 여러 이모지가 결합된 시퀀스처럼 코드 포인트가 여러 개인 기호는 독자에게 하나의 자소로 보이더라도 len()에서는 여러 요소로 계산될 수 있습니다.

다음 예제를 실행해 보세요. 코드 블록은 바이트 단위로 유지되므로 예제 문자열 Hello, World!는 영어 그대로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

text = "Hello, World!"
print(len(text))

출력:

13

문자열 요소 수를 바로 구하려면 문자열 자체를 len()에 전달하세요. Python은 함수가 문자열을 받기 전에 문자열 리터럴의 이스케이프를 해석합니다. "\n"은 줄바꿈을 나타내고, "\\n"은 백슬래시와 문자 n을 차례로 포함한 문자열을 나타냅니다. len()는 이 과정을 거친 문자열을 세며 이스케이프를 직접 해석하지 않습니다.

필요할 때 문자를 직접 세기

문자열을 세는 작업이 더 큰 처리 과정의 일부라면 직접 반복하는 방법이 유용할 수 있습니다. 문자열을 반복할 때마다 코드 포인트 하나가 나오므로, 반복마다 1을 더하면 len()와 같은 요소 수를 얻습니다. 다만 실행 시간은 문자열 길이에 비례합니다. 일반적인 길이 확인에는 len()를 사용하는 편이 좋습니다.

먼저 텍스트를 정규화하거나 양 끝 공백을 제거해야 한다면, 문자열을 변환한 다음 결과를 측정하세요. 예를 들어 text.strip()은 앞뒤 공백이 제거된 새 문자열을 반환하며, len(text.strip())은 그 새 문자열의 길이를 셉니다. 원래 text 자체는 바뀌지 않습니다. 마찬가지로 일부 유니코드 텍스트는 소문자로 바꿀 때 코드 포인트 수가 달라질 수 있으므로, 변환한 값의 길이가 필요한 경우 변환 후에 측정하세요.

문자열 객체의 메모리 크기 측정하기

객체의 얕은 크기를 바이트 단위로 추정하려면 sys에서 getsizeof를 가져와 문자열을 인수로 전달하세요. 반환값에는 문자열 객체 자체가 포함되지만, 객체가 참조하는 다른 객체는 포함되지 않습니다. 이 값은 문자 수가 아니며 텍스트를 UTF-8로 인코딩했을 때의 바이트 수도 아닙니다. 인코딩된 데이터의 크기를 측정하려면 문자열을 인코딩한 뒤 결과인 bytes 값을 측정하세요.

코드 블록은 바이트 단위로 유지되므로 예제 문자열 Hello, World!는 영어 그대로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import sys

text = "Hello, World!"
size_in_bytes = sys.getsizeof(text)
print(size_in_bytes)

출력:

54

이 메모리 크기 결과는 특정 Python 구현과 버전에서 관찰된 값이며, 환경에 따라 달라집니다. 따라서 54바이트를 보편적인 값으로 간주하지 마세요. 문자열 길이를 구할 때는 len()를 사용하고, 객체 자체의 얕은 크기가 궁금할 때는 sys.getsizeof()를 사용하세요.