문자열을 다른 문자열에 추가할 때 다음을 수행하는 것이 효율적입니다. 특히 여러 연결이 있는 시나리오의 경우 작업을 최적화합니다. 질문에 설명된 전통적인 방법인 var3 = var1 var2가 항상 가장 효율적인 것은 아닙니다.
Python의 기본 구현인 CPython은 초기 문자열에 대한 참조가 하나만 존재할 때 문자열 연결에 대한 특정 최적화를 사용합니다. 이 최적화는 문자열을 제자리에서 확장하려고 시도하여 상각된 O(n) 작업이 발생합니다. 이는 이전에 O(n^2)였던
s = "" for i in range(n): s += str(i)
과 같은 시나리오의 경우 이제 O(n)에서 훨씬 더 빨라졌다는 것을 의미합니다.
CPython의 최적화는 bytesobject.c 내의 _PyBytes_Resize 함수에서 구현됩니다. 문자열 객체에 대한 메모리를 재할당하여 지정된 양만큼 크기를 늘립니다. 성공하면 문자열의 크기를 업데이트하고 후행 null 바이트를 설정하여 문자열을 종료합니다.
이 최적화를 경험적으로 설명하려면 다음을 고려하세요. timeit 결과:
$ python -m timeit -s"s=''" "for i in xrange(10):s+='a'" 1000000 loops, best of 3: 1.85 usec per loop $ python -m timeit -s"s=''" "for i in xrange(100):s+='a'" 10000 loops, best of 3: 16.8 usec per loop $ python -m timeit -s"s=''" "for i in xrange(1000):s+='a'" 10000 loops, best of 3: 158 usec per loop $ python -m timeit -s"s=''" "for i in xrange(10000):s+='a'" 1000 loops, best of 3: 1.71 msec per loop $ python -m timeit -s"s=''" "for i in xrange(100000):s+='a'" 10 loops, best of 3: 14.6 msec per loop $ python -m timeit -s"s=''" "for i in xrange(1000000):s+='a'" 10 loops, best of 3: 173 msec per loop
더 작은 문자열의 경우 오버헤드는 최소화되지만 문자열 크기가 증가하면 최적화된 접근 방식이 훨씬 더 효율적이 됩니다.
이 최적화는 Python 사양의 일부가 아니라는 점에 유의하는 것이 중요합니다. 이는 CPython의 특정 구현 세부 사항이며 PyPy 또는 Jython과 같은 다른 Python 구현에는 없을 수도 있습니다.
위 내용은 Python의 문자열 연결은 얼마나 효율적이며 언제 최적화됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!