تقنية

optimize في بايثون: هل يحذف كل أوامر حفظ المذكرة؟

عدد BINPUT ينخفض من اثنين إلى واحد
حذف الحفظ الزائد. [1] [2] [3]

افحص استعمال المرجع قبل حذف حفظه. [1] [2] [3]

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

لا؛ يحذف الحفظ غير المستعمل، ويبقي ما تقرؤه تعليمات لاحقة. [1] [2] [3]

  • الخارجية تشير مرتين إلى قائمة فارغة. [1] [2] [3]
  • مع protocol=2، ينخفض عدد BINPUT من 2 إلى 1. [1] [2] [3]
  • حفظ الخارجية غير مستعمل؛ حفظ الداخلية مطلوب. [1] [2] [3]
  • يبقى المرجعان مشتركين بعد الاسترجاع: True. [1] [2] [3]
  • اختبرنا 3.12.14؛ حمّلنا بايتاتنا المحلية فقط. [1] [2] [3]

المثال

import pickle as p,pickletools as t
x=[]
a=p.dumps([x,x],protocol=2)
b=t.optimize(a)
def puts(v):
 return sum(o.name=="BINPUT"
  for o,_,_ in t.genops(v))
print(puts(a),puts(b))
y=p.loads(b)
print(y[0] is y[1])

[1] [2] [3]

لماذا يبقى أمر؟

المصدر يحذف الحفظ بلا قراءة. الناتج 2 1، ثم True. يعيد ترقيم الحفظ والقراءة المستعملين من 1 إلى 0. [1] [2] [3]

الحفظ والقراءة المستعملان يعاد ترقيمهما وتبقى المشاركة
المرجع المستعمل محفوظ. [1] [2] [3]

حد التجربة

لم نُلغِ المذكرة كلها أو نقس الأداء. لا تحمّل pickle مجهول الثقة. [1] [2] [3]

المراجع

  1. Python 3.12: pickletools.optimize
  2. CPython 3.12.14: memo optimization
  3. Python 3.12: owned pickle bytes
  4. موضوع تك: لغة بايثون — مفردات
  5. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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