2012-04-24 2 views
5

내가 알 수있는 바로는, PyList_SetItem과 PyList_SETITEM의 차이점은 PyList_SetItem은 덮어 쓰는 목록 항목의 참조 횟수를 낮추고 PyList_SETITEM은 그렇지 않다는 점입니다.PyList_SetItem 대 PyList_SETITEM

항상 PyList_SetItem을 항상 사용하지 않아야하는 이유가 있습니까? 또는 PyList_SetItem을 사용하여 목록의 인덱스 위치를 초기화하면 문제가 발생합니까?

답변

6

PyList_SET_ITEM은 기본적으로 바운드 검사없이 개체를 목록의 내부 포인터 배열에 고정시키는 안전하지 않은 매크로입니다. NULL이 아닌 항목이 목록의 i 번째 위치에 있으면 참조 누수가 발생합니다. PyList_SET_ITEM은 목록에 넣은 개체에 대한 참조를 도용합니다. PyList_SetItem도 참조를 훔치지 만 바운드를 확인하고 i 번째 위치에있을 수있는 모든 것을 감소시킵니다. 엄지 손가락은 PyList_SET_ITEM을 사용하여 방금 작성한 목록을 초기화하고 그렇지 않으면 PyList_SetItem입니다. 또한 어디서나 PyList_SetItem을 사용하는 것이 안전합니다. PyList_SET_ITEM은 기본적으로 속도 해킹입니다.

+1

하지만 PyList_SetItem * all * 시간을 사용하고 절대로 PyList_SETITEM을 사용하지 않으면 문제가 발생합니까? – user1245262

+2

절대적으로 아닙니다. 실제로, 그것은 아마도 가장 안전한 방법 일 것입니다. 'PyList_SET_ITEM'은 대부분 속도 해킹입니다. –

+0

감사합니다. 원본 답변에 명확한 마지막 줄을 추가해 주셔서 감사합니다. – user1245262