2.1 클로저의 늦은 연결
다른 동적 프로그래밍을 쓰던 프로그래머라면 파이썬의 범위 결정(scoping) 방식에 당혹해 할 수도 있습니다. 많은 개발자들은 람다(lambda) 함수를 포함하여 순환 안에서 생성된 모든 함수는 해당 함수가 생성된 시점의 변수 값을 사용할 것이라고 전제하기 마련입니다. 여기서 순환은 list, set, dict, 생성기 순환 표현식의 순환 요소를 모두 포괄하는 개념입니다.
Note ≡ 자주 사용되는 불변 객체의 재사용
CPython을 비롯한 일부 구현에서는 최적화 전략의 일환으로, 때때로 특정 객체가 할당 받은 메모리를 재사용(interning)하는 방식을 이용해 사실상 영구적인 객체로 취급합니다. 그중에서도 특히 작은 정수나 짧은 문자열은 동일한 객체를 재사용하여 다른 이름으로 불리는 동등한 객체를 참조하는 경우가 많습니다.
이러한 처리가 이루어지는 구체적인 상황은 구현이나 버전에 따라 다를 수 있기 때문에, 프로그램 안에서 이 처리 방식이 반드시 일어난다고 가정하고 의존하면 안 됩니다. 이러한 최적화는 프로그램의 속도를 향상시킬 수 있지만 필수적인 요소는 아닙니다. 예를 들어 CPython과 PyPy는 재사용 방식이 서로 매우 다르지만 잘 작성된 프로그램에서는 그 차이를 알아차릴 수 없습니다.