목록의 insert기능을 사용하는 것은 슬라이스 할당을 사용하여 동일한 효과를 얻는 것보다 훨씬 느립니다.
> python -m timeit -n 100000 -s "a=[]" "a.insert(0,0)"
100000 loops, best of 5: 19.2 usec per loop
> python -m timeit -n 100000 -s "a=[]" "a[0:0]=[0]"
100000 loops, best of 5: 6.78 usec per loop
( a=[]이것은 설정일 뿐이므로 a비우기 시작하지만 10 만 요소로 커집니다.)
처음에는 속성 조회 또는 함수 호출 오버 헤드 정도라고 생각했지만 끝 부분에 삽입하면 무시할 만하다는 것을 알 수 있습니다.
> python -m timeit -n 100000 -s "a=[]" "a.insert(-1,0)"
100000 loops, best of 5: 79.1 nsec per loop
아마도 더 단순한 전용 "삽입 단일 요소"기능이 훨씬 느린 이유는 무엇입니까?
나는 또한 repl.it에서 그것을 재생할 수 있습니다 :
from timeit import repeat
for _ in range(3):
for stmt in 'a.insert(0,0)', 'a[0:0]=[0]', 'a.insert(-1,0)':
t = min(repeat(stmt, 'a=[]', number=10**5))
print('%.6f' % t, stmt)
print()
# Example output:
#
# 4.803514 a.insert(0,0)
# 1.807832 a[0:0]=[0]
# 0.012533 a.insert(-1,0)
#
# 4.967313 a.insert(0,0)
# 1.821665 a[0:0]=[0]
# 0.012738 a.insert(-1,0)
#
# 5.694100 a.insert(0,0)
# 1.899940 a[0:0]=[0]
# 0.012664 a.insert(-1,0)
Windows 10 64 비트에서 Python 3.8.1 32 비트를 사용합니다.
repl.it는 Linux 64 비트에서 Python 3.8.1 64 비트를 사용합니다.
빈 목록으로 이것을 테스트하는 이유가 있습니까?
—
MisterMiyagi
@MisterMiyagi 글쎄, 나는 무언가 로 시작해야 합니다 . 첫 번째 삽입 전에 만 비어 있고 벤치 마크 중에 100,000 개의 요소로 커집니다.
—
힙 오버 플로우
@ smac89 님
—
Ch3steR
a=[1,2,3];a[100:200]=[4]이 흥미로운 4목록의 끝에 추가 하고 a있습니다.
@ smac89 사실이지만,이 질문과 실제로 관련이있는 것은 아니며 누군가 벤치마킹
—
Heap Overflow
a=[]; a[0:0]=[0]중이거나 a[0:0]=[0]다음과 같은 생각을하게 할 수도 있습니다 a[100:200]=[0].
a=[]; a[0:0]=[0]와 동일한 않습니다a=[]; a[100:200]=[0]