تقنية

حجم القائمة في بايثون: هل getsizeof يحسب عناصرها أيضًا؟

قياس القائمة ثابت وطول النص عشرة آلاف
مساواة قياس القائمة قبل الاستبدال وبعده. [1] [2]

سم الكائن الذي تقيسه. [1] [2]

الخلاصة السريعة

getsizeof(a) يقيس الذاكرة المنسوبة مباشرة للقائمة، دون أحجام الكائنات التي تشير إليها. [1] [2]

  • نبدأ بقائمة ذات عنصر واحد: 0. [1] [2]
  • نحفظ قياسها قبل الاستبدال. [1] [2]
  • نستبدل العنصر بنص من 10000 محرف x. [1] [2]
  • في تجربتنا يبقى القياس مساويًا للسابق؛ الناتج True. [1] [2]
  • اختبرنا CPython 3.12.14؛ طول النص ليس قياس بايتات أو إجمالي ذاكرة البرنامج. [1] [2]

المثال

import sys
a=[0]
before=sys.getsizeof(a)
a[0]='x'*10000
print(sys.getsizeof(a)==before)
print(len(a[0]))

[1] [2]

المخرجات: True ثم 10000. [1] [2]

لماذا لم يكبر القياس؟

استبدلنا موضعًا موجودًا دون إضافة عناصر؛ حجم النص خارج قياس القائمة المباشر. [1] [2]

بعد الاستبدال صار العنصر نصًا طويلًا؛ ثبات القياس لا يعني أن النص بلا تكلفة ذاكرة. [1] [2]

الموضع نفسه انتقل من الصفر إلى نص طويل
x × 10000 اختصار للنص. [1] [2]

حدود النتيجة

لا نقدم مجموعًا لأحجام المحتويات أو رقم بايتات لكل بيئة؛ الإضافة والفئات المخصصة خارج المثال. [1] [2]

المراجع

  1. Python: sys.getsizeof
  2. CPython 3.12.14: sysmodule.c
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.