تقنية

تعديل قائمة shelve: هل تغير المخزن أم النسخة المقروءة؟

القائمة المقروءة تغيرت والمخزن بقي أربعة
بعد إضافة 9 دون إسناد. [1] [2]

افصل التعديل عن إسناد القيمة للمخزن. [1] [2]

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

مع writeback=False الافتراضي، تعديل القائمة المقروءة لا يحدّث قيمة shelve تلقائيًا. [1] [2]

  • نخزن [4] في المفتاح النصي a. [1] [2]
  • نقرأها في x ونضيف 9. [1] [2]
  • تصير x مساوية لـ[4, 9]؛ المخزن يعيد [4]. [1] [2]
  • إسناد db['a']=x يثبت القائمة المعدلة. [1] [2]
  • اختبرنا 3.12.14 بمخزن أنشأناه مؤقتًا؛ لا نختبر التزامن أو writeback=True. [1] [2]

المثال

import shelve as s,tempfile as t
with t.TemporaryDirectory() as d:
 with s.open(d+'/x') as db:
  db['a']=[4]
  x=db['a'];x.append(9)
  print(x,db['a'])
  db['a']=x
  print(db['a'])

[1] [2]

المخرجات: [4, 9] [4] ثم [4, 9]. [1] [2]

متى يتغير المخزن؟

القراءة تعيد كائنًا. تعديل x لا يكتب القيمة؛ الإسناد يسلسلها للمخزن. [1] [2]

بعد الإسناد نقرأ القائمة المعدلة؛ استخدمنا with لإغلاق المخزن. [1] [2]

الإسناد يغير القيمة المخزنة إلى أربعة وتسعة
a مفتاح نصي؛ اختصرنا اقتباسه. [1] [2]

حدود التجربة

الملف مؤقت للاختبار؛ لم نختبر دوام البيانات عند الانقطاع. [1] [2]

المراجع

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

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