একটি তালিকা ব্যবহার করে 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৪-বিটে পাইথন ৩.৮.১৪৪-বিট ব্যবহার করে।
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]