Python에서 목록 추가보다 목록 이해가 더 빠른 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-28 16:58:29
원래의
120명이 탐색했습니다.

Why Are List Comprehensions Faster Than List Appending in Python?

목록 이해가 목록 추가보다 성능이 뛰어난 이유

목록 이해가 단순한 표현 설탕으로 인식됨에도 불구하고 목록 추가에 비해 상당한 속도 이점을 보여줍니다. . 이러한 차이는 표현적인 차이를 넘어 확장됩니다.

설명하기 위해 다음 timeit 벤치마크를 고려해보세요.

<code class="python">import timeit

time = timeit.timeit('t=[]\nfor i in range(10000):\n    t.append(i)', number=10000)
time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>
로그인 후 복사

결과에 따르면 목록 이해가 목록에 추가하는 것보다 약 50% 더 빠르게 실행되는 것으로 나타났습니다.

속도 증가 이유

목록 이해는 여러 가지 성능 최적화를 활용합니다.

  • 속성 로딩 및 함수 호출 제거: 목록 추가에서 각 반복에서는 목록의 추가 속성을 로드하고 이를 함수로 호출해야 합니다. 목록 이해는 요청 시 새 목록을 생성하여 이러한 오버헤드를 제거합니다.
  • 일시 중지 및 재개와 즉시 목록 생성 비교: 함수 프레임을 일시 중지하고 다시 시작하는 것은 일반적으로 요청 시 목록을 직접 생성하는 것보다 느립니다. .

다음 코드 조각을 고려하세요.

<code class="python">def f1():
    l = []                                    # Create a new list
    for i in range(5):                      # Iterate through a range
        l.append(i)                         # Append each number to the list

def f2():
    [i for i in range(5)]                  # Use list comprehension to create a new list</code>
로그인 후 복사

dis 모듈을 사용하여 이러한 함수를 분해하면 차이점이 드러납니다.

<code class="python">dis.dis(f1)
dis.dis(f2)</code>
로그인 후 복사

f1에서는 목록 생성과 추가 속성(오프셋 18 및 20)의 로드 및 호출을 관찰합니다. 그러나 f2에서는 이러한 연산이 없기 때문에 더 효율적인 코드가 됩니다.

결론

목록 내포는 속성 로딩, 함수 호출 및 기능 프레임의 일시 중지 및 재개와 관련된 오버헤드. 결과적으로 속도가 최우선인 새 목록을 만드는 데 권장되는 경우가 많습니다.

위 내용은 Python에서 목록 추가보다 목록 이해가 더 빠른 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!