len() 작동 방식을 알고 싶습니다.파이썬 카운트 목록 길이 길이
len()을 호출 할 때마다 목록의 처음부터 끝까지 계산됩니다. 또는 목록도 클래스이므로 len()은 목록의 길이를 기록하는 목록 개체의 변수 만 반환합니까?
또한, 나는
len() 작동 방식을 알고 싶습니다.파이썬 카운트 목록 길이 길이
len()을 호출 할 때마다 목록의 처음부터 끝까지 계산됩니다. 또는 목록도 클래스이므로 len()은 목록의 길이를 기록하는 목록 개체의 변수 만 반환합니까?
또한, 나는
다운로드 파이썬 2.7 소스 코드 : http://www.python.org/getit/releases/2.7.4/
list
은 ./Include/listobject.h
및 ./Objects/listobject.c
에서 구현됩니다.
typedef struct {
PyObject_VAR_HEAD
/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
PyObject **ob_item;
/* ob_item contains space for 'allocated' elements. The number
* currently in use is ob_size.
* Invariants:
* 0 <= ob_size <= allocated
* len(list) == ob_size
* ob_item == NULL implies ob_size == allocated == 0
* list.sort() temporarily sets allocated to -1 to detect mutations.
*
* Items must normally not be NULL, except during construction when
* the list is not yet visible outside the function that builds it.
*/
Py_ssize_t allocated;
} PyListObject;
list.__len__()
단지 PyObject_VAR_HEAD
의 일부인 ob_size
을 협의. 이것은 len()
을리스트의 상수 시간 연산으로 만듭니다.
글쎄, 당신은 찾을 수 등, 내가 좋아하는 그 내장 함수 '렌()', '지도()'의 소스 코드를 찾을 수있는 사람이 말해 수 있기를 바랍니다 내장 함수 here의 문서
데이터 유형이 list
이면 보유하고있는 요소의 수를 추적하므로 len(list)
은 O (1) 연산입니다. 소스 코드에 대한
리스트 객체의'__len__' 메소드를 호출합니다. 당신은 여기에 소스를 볼 수 있습니다 : http://svn.python.org/view/python/tags/r27/Objects/listobject.c?view=markup – Blender
그것은 그것의 길이를 추적하므로 매 시간마다 재개하지 않습니다. –
그리고 내장 소스의 소스는 다음과 같습니다. http://hg.python.org/releasing/2.7.4/file/9290822f2280/Python/bltinmodule.c#l928 – Blender