تقنية

MappingProxyType في بايثون: عرض للقراءة يتبع القاموس

قيمة a في الأصل والعرض تتغير من 4 إلى 9
المفتاح النصي a. [1] [2]

راقب طريق التعديل. [1] [2]

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

MappingProxyType عرض حي، لا نسخة ثابتة. [1] [2]

  • تقرأ p['a'] القيمة 4 أولًا. [1] [2]
  • تعديل الأصل d['a']=9 يظهر عبر p بالقيمة 9. [1] [2]
  • محاولة p['a']=7 تسبب TypeError. [1] [2]
  • رفض الإسناد عبر العرض لا يجمد القاموس الأصلي. [1] [2]
  • اختبرنا 3.12.14 وقاموسًا عاديًا بقيم صحيحة؛ لا ضمان لتجميد القيم المتداخلة. [1] [2]

المثال

from types import MappingProxyType
d={'a':4};p=MappingProxyType(d)
print(p['a'])
d['a']=9
print(p['a'])
try:p['a']=7
except TypeError:
 print('TypeError')

[1] [2]

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

عرض الأصل

العرض يستعيد القيمة من القاموس نفسه عند القراءة. لم ننسخ بياناته وقت إنشاء p. [1] [2]

بعد التغيير في الأصل تظل القراءة ممكنة، لكن الإسناد عبر العرض مرفوض؛ يبقى d['a'] مساويًا لـ9. [1] [2]

التعديل عبر d ينجح وعبر p يسبب TypeError
الإسناد للمفتاح a. [1] [2]

النطاق

لذلك لا نعتمد العرض سجلًا للقيم القديمة. التجربة لا تختبر قواميس مخصصة أو أمن عزل البيانات. [1] [2]

المراجع

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

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