การใช้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
เริ่มว่างเปล่าจากนั้นขยายเป็น 100,000 องค์ประกอบ)
ตอนแรกฉันคิดว่าอาจเป็นการค้นหาแอตทริบิวต์หรือการเรียกใช้ค่าใช้จ่ายหรือมากกว่านั้น แต่การแทรกเข้าใกล้จุดสิ้นสุดแสดงว่าไม่สำคัญ:
> python -m timeit -n 100000 -s "a=[]" "a.insert(-1,0)"
100000 loops, best of 5: 79.1 nsec per loop
ทำไมฟังก์ชั่น "insert single element" ที่เรียบง่ายโดยเฉพาะน่าจะช้ากว่ามาก?
ฉันยังสามารถทำซ้ำได้ที่ 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)
ฉันใช้ Python 3.8.1 32- บิตบน Windows 10 64- บิต
repl.it ใช้ Python 3.8.1 64- บิตบน Linux 64- บิต
a=[1,2,3];a[100:200]=[4]
กำลังต่อ4
ท้ายรายการที่a
น่าสนใจ
a=[]; a[0:0]=[0]
หรือนั่นa[0:0]=[0]
ก็เหมือนกับa[100:200]=[0]
...
a=[]; a[0:0]=[0]
ทำเช่นเดียวกันกับa=[]; a[100:200]=[0]