Menggunakan insertfungsi daftar jauh lebih lambat daripada mencapai efek yang sama menggunakan tugas slice:
> 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
(Perhatikan bahwa a=[]ini hanya pengaturan, jadi amulai kosong tetapi kemudian tumbuh hingga 100.000 elemen.)
Pada awalnya saya pikir mungkin itu atribut lookup atau function call overhead atau lebih, tetapi menyisipkan di dekat akhir menunjukkan bahwa itu dapat diabaikan:
> python -m timeit -n 100000 -s "a=[]" "a.insert(-1,0)"
100000 loops, best of 5: 79.1 nsec per loop
Mengapa fungsi "sisipkan satu elemen" khusus yang mungkin lebih sederhana sangat lambat?
Saya juga dapat mereproduksi di 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)
Saya menggunakan Python 3.8.1 32-bit pada Windows 10 64-bit.
repl.it menggunakan Python 3.8.1 64-bit di Linux 64-bit.
a=[1,2,3];a[100:200]=[4]menambahkan 4ke akhir daftar yang amenarik.
a=[]; a[0:0]=[0]atau yang a[0:0]=[0]melakukan hal yang sama a[100:200]=[0]...
a=[]; a[0:0]=[0]melakukan hal yang samaa=[]; a[100:200]=[0]