답변:
어떤 코드가 더 빠른지 테스트하는 방법은 다음과 같습니다.
% python -mtimeit "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop
% python -mtimeit "l=list()"
1000000 loops, best of 3: 0.297 usec per loop
그러나 실제로이 초기화는 프로그램의 매우 작은 부분 일 가능성이 높으므로이 문제에 대한 걱정이 잘못 될 수 있습니다.
가독성은 매우 주관적입니다. 나는 선호 []
하지만 Alex Martelli와 같이 매우 잘 알려진 사람들 은 발음list()
하기 쉽기 때문에 선호합니다 .
list('')
주는 []
대신 ['']
?
list('abcd')
하고 모든 것을 이해하십시오)
list()
보다 본질적으로 느린 []
있기 때문에,
기호 조회가 있습니다 (목록을 다른 것으로 정의하지 않은 경우 파이썬이 미리 알 수있는 방법이 없습니다!),
함수 호출이 있습니다.
그런 다음 반복 가능한 인수가 전달되었는지 확인해야합니다 (따라서 요소로 목록을 만들 수 있음) ps. 우리의 경우에는 아무것도 없지만 "if"체크가 있습니다
대부분의 경우 속도 차이는 실질적인 차이를 만들지 않습니다.
list()
더 느린 지 이해하는 것이 좋습니다 []
!
list()
경우에는 인수가 전혀 없는지 확인해야합니다. "반복 가능 여부 확인"및 "요소로 목록 작성"은 발생하지 않습니다. 인수가있는 경우에만 적용됩니다. C 코드 []
가와 동일한 C 코드 를 호출 할 수도 있습니다 list()
. 어쨌든 (c)에 관련된 시간은 (a) + (b)와 비교하여 작을 것입니다.
나는 그것에 대해 실제로 알지 못하지만 경험상 jpcgt가 실제로 옳은 것 같습니다. 다음 예 : 다음 코드를 사용하는 경우
t = [] # implicit instantiation
t = t.append(1)
인터프리터에서 t를 호출하면 목록없이 "t"를 제공하고 다른 것을 추가하면 예를 들어
t = t.append(2)
" 'NoneType'개체에 'append'속성이 없습니다."오류가 발생합니다. 그러나, 내가 목록을 만들면
t = list() # explicit instantiation
그럼 잘 작동합니다.
t.append(1)
수정 t
장소에, 그것은 아무것도하지만 반환하지 않습니다 None
그리고 당신은이를 할당하는 None
에t
. 그래서 t
지금 의미 None
대신 목록에. 여기서 실수 t=t.append(1)
는 그냥 쓰는 대신 쓰는 것입니다 t.append(1)
. 와 동일한 동작을 알 수 list()
있으므로 여기에는 차이가 없습니다.