Python3
200 subscribers
99 photos
6 videos
26 files
517 links
🎓 آموزش و پروژه‌های Python
آموزش‌های کاربردی و پروژه‌های عملی Python برای همه سطوح. 🚀
Download Telegram
📚 دوره آموزش پایتون از 0 تا 100

پارت ۱۸: مدیریت حافظه و Garbage Collection در پایتون 🗑️🧠

در این پارت با مدیریت حافظه و مکانیزم Garbage Collection (GC) در پایتون آشنا می‌شویم. مدیریت حافظه یکی از مفاهیم مهم در برنامه‌نویسی است که به بهینه‌سازی عملکرد برنامه کمک می‌کند.

۱. مدیریت حافظه در پایتون 🧠

پایتون به طور خودکار مدیریت حافظه را انجام می‌دهد، به این معنی که به شما اجازه می‌دهد تا روی نوشتن کد تمرکز کنید بدون اینکه نگرانی از مدیریت دستی حافظه داشته باشید.

- فضای حافظه: هر متغیری که تعریف می‌کنید، فضایی در حافظه اشغال می‌کند.
- هندلینگ خودکار: پایتون به طور خودکار حافظه را تخصیص داده و آزاد می‌کند.

۲. Garbage Collection در پایتون 🗑️

Garbage Collection فرآیندی است که حافظه اشغال‌شده توسط اشیاء غیرقابل‌دسترسی (غیرقابل‌استفاده) را آزاد می‌کند. پایتون دارای یک garbage collector داخلی است که به طور خودکار این فرآیند را مدیریت می‌کند.

۲.۱. اصول اولیه GC

- تخصیص حافظه: هنگامی که یک شیء جدید ایجاد می‌شود، پایتون حافظه موردنیاز را به آن اختصاص می‌دهد.
- جمع‌آوری زباله: هنگامی که یک شیء دیگر قابل‌دسترسی نیست، garbage collector آن را پیدا کرده و حافظه را آزاد می‌کند.

۲.۲. روش‌های GC در پایتون

پایتون از دو روش اصلی برای جمع‌آوری زباله استفاده می‌کند:
- مرجع‌سنجی: هر شیء دارای یک شمارنده مرجع است که تعداد مراجع به آن را نگهداری می‌کند. هنگامی که شمارنده به صفر می‌رسد، حافظه آزاد می‌شود.
- چرخه‌یابی: پایتون از الگوریتم چرخه‌یابی برای شناسایی و آزاد کردن چرخه‌های مرجع که در آن دو یا چند شیء به یکدیگر ارجاع می‌دهند و هرگز آزاد نمی‌شوند، استفاده می‌کند.

۲.۳. استفاده از ماژول gc

ماژول gc در پایتون امکان کنترل و مشاهده وضعیت GC را فراهم می‌کند.

import gc

# فعال‌سازی جمع‌آوری زباله
gc.enable()

# غیر فعال‌سازی جمع‌آوری زباله
gc.disable()

# انجام یک چرخه جمع‌آوری زباله به صورت دستی
gc.collect()

# مشاهده وضعیت جمع‌آوری زباله
print(gc.get_stats())

۳. بهینه‌سازی استفاده از حافظه

برای بهینه‌سازی حافظه در برنامه‌های پایتون، می‌توانید به نکات زیر توجه کنید:

- استفاده از متغیرها و اشیاء بهینه: متغیرها و اشیائی که دیگر نیاز ندارید را آزاد کنید.
- اجتناب از ایجاد چرخه‌های مرجع: چرخه‌های مرجع باعث می‌شوند که garbage collector نتواند حافظه را آزاد کند.
- پایش و پروفایل حافظه: از ابزارهای مختلفی مانند memory_profiler برای پایش و تحلیل مصرف حافظه استفاده کنید.

from memory_profiler import profile

@profile
def my_function():
a = [i for i in range(10000)]
b = {i: i for i in range(10000)}
return a, b

if name == 'main':
my_function()

نکات مهم
- مدیریت حافظه: پایتون به صورت خودکار مدیریت حافظه را انجام می‌دهد.
- جمع‌آوری زباله: پایتون از تکنیک‌های مرجع‌سنجی و چرخه‌یابی برای جمع‌آوری زباله استفاده می‌کند.
- بهینه‌سازی: بهینه‌سازی مصرف حافظه با استفاده از ابزارهای مختلف و تکنیک‌های مدیریت حافظه.

این آموزش به شما کمک می‌کند تا با مفاهیم مدیریت حافظه و Garbage Collection در پایتون آشنا شوید و بتوانید برنامه‌های بهینه‌تری بنویسید. موفق باشید! 🌟

🔻آموزش های مفید بیشتر اینجاست

#پایتون #آموزش_پایتون #مدیریت_حافظه #GarbageCollection #PythonMemoryManagement #PythonProgramming
👍3
مدیریت خودکار حافظه در پایتون 🧠💡

در پایتون، مدیریت حافظه به‌صورت خودکار انجام می‌شود. یعنی برخلاف زبان‌های سطح پایین مثل C و C++، نیازی به تخصیص یا آزادسازی دستی حافظه نیست و این کار به لطف سیستم مدیریت حافظه خودکار انجام می‌شود. این سیستم شامل شمارش ارجاعات و جمع‌آوری زباله‌ها می‌باشد. بیایید به‌صورت کامل این دو مکانیزم را بررسی کنیم:



🔹 بخش اول: شمارش ارجاعات (Reference Counting)
پایتون از شمارش ارجاعات برای مدیریت حافظه استفاده می‌کند. هر شی در پایتون دارای یک شمارشگر است که تعداد ارجاعات به آن شی را نشان می‌دهد. وقتی مقدار شمارش ارجاعات به صفر برسد، یعنی دیگر هیچ بخشی از برنامه به آن شی نیاز ندارد و پایتون می‌تواند حافظه آن را آزاد کند.

چطور شمارش ارجاعات کار می‌کند؟
- هر زمان که یک متغیر به شی‌ای اشاره می‌کند، شمارش ارجاعات آن شی افزایش می‌یابد.
- وقتی ارجاعی حذف می‌شود، شمارش ارجاعات کاهش می‌یابد.
- زمانی که شمارش به صفر برسد، پایتون حافظه را آزاد می‌کند.

مثال:
a = [1, 2, 3]
b = a # شمارش ارجاعات به شی لیست افزایش می‌یابد
del a # شمارش ارجاعات کاهش می‌یابد

مزیت‌ها:
- *سریع و کارآمد*: شمارش ارجاعات بسیار سریع است و به‌صورت همزمان با اجرای برنامه انجام می‌شود.

چالش‌ها:
- *حلقه‌های مرجع*: اگر دو یا چند شی به صورت چرخه‌ای به یکدیگر ارجاع دهند، ممکن است باعث شود که حافظه هرگز آزاد نشود؛ چون شمارش ارجاعات آن‌ها هیچ وقت به صفر نمی‌رسد.



🔹 بخش دوم: جمع‌آوری زباله‌ها (Garbage Collection)
پایتون از یک سیستم جمع‌آوری زباله‌های دورانی برای پاکسازی حافظه اشیاء بدون ارجاع استفاده می‌کند که شمارش ارجاعات به تنهایی قادر به آزادسازی آن‌ها نیست.

چطور جمع‌آوری زباله‌ها کار می‌کند؟
- حلقه‌های مرجع: برای حل مشکل حلقه‌های مرجع، پایتون از جمع‌آوری زباله‌ها استفاده می‌کند. این مکانیزم دوره‌ای اجرا شده و حلقه‌های ارجاعی را شناسایی و آزاد می‌کند.
- ماژول gc: پایتون از ماژول داخلی gc برای اجرای جمع‌آوری زباله استفاده می‌کند. این ماژول به‌طور خودکار در پس‌زمینه کار می‌کند.

مثال: اجرای دستی جمع‌آوری زباله‌ها
import gc

gc.collect() # اجرای دستی جمع‌آوری زباله

مزیت‌ها:
- *حذف حلقه‌های مرجع*: این مکانیزم باعث می‌شود که حافظه اشیائی که در حلقه‌های مرجع هستند آزاد شود.



🔹 بهینه‌سازی حافظه: بهترین تمرین‌ها
برای بهینه‌سازی استفاده از حافظه، این نکات را در نظر بگیرید:

1. پاکسازی متغیرهای غیرضروری: متغیرهایی که دیگر نیازی به آن‌ها ندارید را با del حذف کنید تا شمارش ارجاعات کاهش یابد.
2. کپی‌های غیرضروری را حذف کنید: از کپی‌های سطحی و عمیق تنها در مواقع نیاز استفاده کنید.
3. ماژول gc: می‌توانید در برنامه‌های طولانی‌مدت و پیچیده، با gc.collect() حافظه را بهینه کنید.
4. Weak References: در مواقعی که نیازی به جلوگیری از جمع‌آوری زباله ندارید، از weak referenceها استفاده کنید.



🔹 جمع‌بندی 📜
مدیریت خودکار حافظه در پایتون به لطف شمارش ارجاعات و جمع‌آوری زباله‌ها انجام می‌شود. این سیستم به شما اجازه می‌دهد که بدون نگرانی از مدیریت دستی حافظه، برنامه‌هایی قابل اعتماد و بهینه بسازید. به کمک نکات بالا و ابزارهایی مثل gc می‌توانید مدیریت حافظه را بهتر درک کرده و از آن بهینه‌تر استفاده کنید.


برای آموزش‌های بیشتر و مباحث حرفه‌ای‌تر برنامه‌نویسی، به کانال ما بپیوندید 📢
🔗 [لینک کانال تلگرام]

#PythonMemory #MemoryManagement #GarbageCollection #Python
1