सूची के 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
क्यों संभवतया सरल "समर्पित एकल तत्व" फ़ंक्शन इतना धीमा है?
मैं इसे 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)
मैं विंडोज 10 64-बिट पर पायथन 3.8.1 32-बिट का उपयोग करता हूं।
repl.it लिनक्स 64-बिट पर पायथन 3.8.1 64-बिट का उपयोग करता है।
a=[1,2,3];a[100:200]=[4]है । 4a
a=[]; a[0:0]=[0]कर रहा हूं या वह a[0:0]=[0]भी ऐसा ही करता है a[100:200]=[0]...
a=[]; a[0:0]=[0]के रूप में ही होता हैa=[]; a[100:200]=[0]