발전기가 '상태를 저장'하고 모든 것을 한꺼번에 계산하지 않는 반복문을 반환한다는 일반적인 생각을 이해합니다. 각 호출을 next
으로 계산합니다. 이게 어떻게 작동합니까? 예 : [x for x in range(10) if x%2==0]
대 (x for x in range(10) if x%2==0)
. 목록 이해에서 모든 것이 계산되어 즉시 메모리에 저장됩니다.파이썬 생성기가 메모리를 저장하는 방법
생성기에서는 전체 목록이 생성되지 않고 대신 next를 호출 할 때마다 계산되는 반복 가능한 생성기 개체가 생성됩니다. 하지만이 발전기는 어쨌든 "경계선"이라는 것을 알아야합니다. 맞습니까? 발전기가 모든 계산을 수행하는 백그라운드에 없다면 어떻게 알 수 있습니까? 나는 그것이 목록 이해력의 각 단계를 알아야하고 궁극적으로 StopIteration이 부딪 힐 때까지 전체 발전기를 순환하는 것으로 끝나면 대략 동일한 양의 메모리를 사용하고 있다고 생각할 것입니다.
Heh, @thefourtheye, 나는 그 정보를 약간 다른 형태로 재연하려하고있었습니다. 그러나 다른 대답은 실제로이 질문에 대답하기에 충분한 정보를 담고 있습니다. –
'range'는 (최소한 파이썬 2x에서)리스트를 반환합니다 ... 기본적으로 생성자로부터의 모든 이점을 완전히 지 웁니다 ... –
@JoranBeasley : OP가 파이썬 3.x를 사용하고 있다고 자비로 가정합니다. :-) –