بايثون العرب
10.5K subscribers
866 photos
183 videos
768 links
Download Telegram
⚡️ الفرق بين القوائم والمولدات في استهلاك الذاكرة في بايثون ⚡️

في بايثون، القوائم (Lists) والمولدات (Generators) كلاهما يستخدمان لتخزين تسلسلات من البيانات، ولكن طريقة تخزينهما تختلف جذريًا، مما يؤثر بشكل كبير على استهلاك الذاكرة، خاصة مع البيانات الضخمة.

def list_example(n):
return list(range(n))

def generator_example(n):
for i in range(n):
yield i

# مثال على الاستخدام
num_elements = 1000000

# قائمة
my_list = list_example(num_elements)
print(f"حجم القائمة: {len(my_list)}")
# ملاحظة: هنا تم تخصيص ذاكرة لكل العناصر مرة واحدة.

# مولد
my_generator = generator_example(num_elements)
print(f"حجم المولد (غير قابل للقياس مباشرة بنفس الطريقة)")
# ملاحظة: المولد لا يخزن كل العناصر في الذاكرة، بل ينتجها عند الطلب.

# استهلاك عنصر واحد من المولد
print(f"العنصر الأول من المولد: {next(my_generator)}")


القوائم تقوم بتخزين جميع عناصرها في الذاكرة دفعة واحدة عند إنشائها. هذا يجعل الوصول إلى أي عنصر سريعًا جدًا (O(1))، ولكنه يستهلك ذاكرة تتناسب طرديًا مع عدد العناصر. أما المولدات، فهي تستخدم مفهوم 'الكسل' (Lazy Evaluation)، حيث لا تخزن العناصر في الذاكرة. بدلاً من ذلك، تقوم بإنتاج عنصر واحد في كل مرة عند الحاجة إليه (باستخدام `yield`). هذا يجعلها فعالة جدًا من حيث استهلاك الذاكرة، خاصة عند التعامل مع مجموعات بيانات كبيرة جدًا أو لا نهائية، على حساب أن الوصول إلى عنصر معين قد يتطلب المرور على العناصر السابقة (إذا لم تكن قد أنتجت بالفعل).

['#بايثون', '#برمجة', '#قوائم', '#مولدات', '#استهلاك_الذاكرة', '#Python', '#Programming', '#Lists', '#Generators', '#MemoryEfficiency']