تقنية

MappingProxyType في بايثون: هل القراءة فقط تجعل القاموس قابلًا للتجزئة؟

MappingProxyType; H(dict); __hash__ returns 17; own=H(bud=4); p=MappingProxyType(own); hash(own):17; hash(p):17
تجزئة مخصصة.

القراءة فقط لا تجعل القاموس العادي قابلًا للتجزئة في اختبارنا. [1] [2]

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

لا؛ تجزئة العرض تعتمد على الخريطة الأصلية هنا. [1] [2]

  • القراءة فقط لا تجعل القاموس العادي قابلًا للتجزئة في اختبارنا. [1] [2]
  • على CPython 3.12.14، H ترث dict وتعرّف __hash__ لتعطي 17؛ own=H(bud=4)، وp=MappingProxyType(own). [1] [2]
  • hash(own) وhash(p) تعطيان 17؛ مصدر القيمة تعريف H، لا مجرد منع الكتابة عبر العرض. [1] [2]
  • نوع العرض يربط tp_hash بالدالة mappingproxy_hash؛ التنفيذ يطلب PyObject_Hash للخريطة الموجودة تحته. [1] [2]
  • تحكم مستقل: control={"bud":4} قاموس عادي؛ hash له ولعرضه ترفع TypeError. العدد 17 قيمة اختبار؛ لا نختبر مفاتيح القواميس أو تغير البيانات أو تصميم تجزئة للإنتاج. [1] [2]

شرط التجزئة

القراءة فقط لا تجعل القاموس العادي قابلًا للتجزئة في اختبارنا. [1] [2]

تعريف مؤلف

على CPython 3.12.14، H ترث dict وتعرّف __hash__ لتعطي 17؛ own=H(bud=4)، وp=MappingProxyType(own). [1] [2]

قيمة مشتركة

hash(own) وhash(p) تعطيان 17؛ مصدر القيمة تعريف H، لا مجرد منع الكتابة عبر العرض. [1] [2]

from types import MappingProxyType class H(dict): def __hash__(self):return 17 own=H(bud=4);p=MappingProxyType(own) print(hash(own),hash(p)) [1] [2]

MappingProxyType; control={"bud":4}; cp=MappingProxyType(control); hash(control):TypeError; hash(cp):TypeError
قاموس عادي.

التفويض والتحكم

نوع العرض يربط tp_hash بالدالة mappingproxy_hash؛ التنفيذ يطلب PyObject_Hash للخريطة الموجودة تحته. [1] [2]

control={"bud":4};cp=MappingProxyType(control) for obj in (control,cp): try:print(hash(obj)) except TypeError:print("TypeError") [1] [2]

تحكم مستقل: control={"bud":4} قاموس عادي؛ hash له ولعرضه ترفع TypeError. العدد 17 قيمة اختبار؛ لا نختبر مفاتيح القواميس أو تغير البيانات أو تصميم تجزئة للإنتاج. [1] [2]

المراجع

  1. Python MappingProxyType
  2. CPython mappingproxy

للتوسع: لغات البرمجة.

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