Skip to content

برگه‌ها

  • درباره من

تماس با من

برای ارتباط با بنده ایمیل های خود را به آدرس :
miladhzz@gmail.com
ارسال کنید
و یا به شماره 09384677005 پیامک ارسال کنید.

سایت میلاد حاتمی
  • پروژه ها
  • آموزش
  • برنامه نویسی
  • نرم افزار
  • درباره من
خانه » نکاتی در مورد list ها در python که لازم است بدانیم

نکاتی در مورد list ها در python که لازم است بدانیم

Post Views: 27
Leave a comment on نکاتی در مورد list ها در python که لازم است بدانیم ژوئن 7, 2023 ژوئن 7, 2023 علاقه شخصی
نویسنده

در راستای افزایش عملکرد کد پایتون، امروز میخوام یه نکته خیلی مهم رو تو #پایتون در خصوص لیست‌ها بررسی کنیم که شاید کمتر کسی بدونه یا بهش دقت کنه. اگه تو کدتون از لیست‌ها در پایتون استفاده می‌کنید، این نکته میتونه تاثیر زیادی تو عملکرد برنامه‌تون داشته باشه.

🔺 اما قبلش باید کمی در خصوص لیست‌ها در پایتون صحبت کنیم، #لیست یا #list در پایتون یه ساختار داده‌ای به صورت builtin هست که در واقع یک #آرایه پویا هست. آرایه پویا یعنی قابل تغییر هست (Mutable) و امکان تغییر سایز رو هم داره.

🚨 نکته تو همین بحث تغییر سایز هست، فرض کنید که ما یه لیست داریم با ۵ آیتم و میخوایم یه آیتم دیگه بهش اضافه کنیم یا اصطلاحا append کنیم. این کار رو به راحتی با متد .append می‌تونیم انجام بدیم. 🚨

🌐 اتفاقی که در این حالت میوفته اینه که پایتون برای این که بتونه اون آیتم رو به لیست اولیه اضافه کنه، باید بیاد یه لیست جدید درست کنه که به اندازه ۶ آیتم جا داشته باشه و لیست قبلی رو نابود کنه. در ابتدا شاید فکر کنید که خب پایتون میاد یه لیست جدید به طول تعداد آیتم‌های جدید درست میکنه، یعنی در این مثال ۶.

⚠️ اما نکته اینجاس که اینطور نیست!
🕯 فلسفه پایتون در این زمینه به این صورت هست که وقتی یکبار عملیات append داریم، به احتمال زیاد appendهای بیشتری در آینده برای اون لیست خواهیم داشت، پس برای حفظ سرعت O(1) در زمان اضافه کردن آیتم جدید به لیست، فضای بیشتری برای لیست جدید در نظر میگیره، اصطلاحا Overallocate میکنه.

🚨 اگه n تعداد آیتم‌های لیست قبل از append و m میزان فضای اختصاص داده شده به واحد آیتم در لیست جدید باشه، فرمول تخصیص فضای اضافه در پایتون به این صورت هست:

m = (n >> 3) + (3 if n < 9 else 6)♾

🔹 توجه داشته باشید که << عملگر شیفت به راست هست تو پایتون.

🌐 تو این مثال n ما در ابتدا ۵ بود و لیستی که ساخته بودیم تو حافظه به میزان ۵ واحد فضا اشغال کرده بود، حالا اگه بهش یک آیتم append کنیم لیست جدید ما در حافظه در اصل ۸ واحد فضا اشغال میکنه. تا جایی برسه که لیست ما ۸ آیتم داشته باشه و بخوایم آیتم ۹ام رو append کنیم، در این حالت لیست جدید جای ۹ آیتم، ۱۶ واحد فضا اشغال میکنه و همینطوری تا انتها.

🔸 برای لیست‌ها با ابعاد کوچک شاید این موضوع زیاد مهم نباشه، اما کم کم تبدیل به یک اصطلاحا Bloat در حافظه میشه، برای مثال اگه لیستی با ۱۰۰،۰۰۰ آیتم داشته باشیم، Append کردن بهش باعث میشه که ۲.۷ برابر فضای بیشتری نسبت به حالت ساخت لیست جدید با List Comprehension استفاده کنه.

✔️ در نهایت اگه میزان حافظه براتون مهم هست، جای append کردن به لیست، استفاده از List Comprehension و ساخت لیست جدید، باعث کاهش حافظه مصرفی برنامه‌تون به شکل چشم‌گیری خواهد شد!

👆🏻 توی تصویر مثالی از یک لیست تو پایتون که با استفاده از append چندین بار mutated میشه قابل مشاهده است. 👆🏻
لینک مطلب:
https://www.linkedin.com/posts/raminferdos_afyaepahyaesaewaeu-aesahyaebaes-list-activity-6964146839273017344-7oqc?utm_source=linkedin_share&utm_medium=member_desktop_web

Post Views: 27

Add a Comment لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Time limit is exhausted. Please reload CAPTCHA.

© 2023 - All rights reserved