القراءة فقط لا تجعل القاموس العادي قابلًا للتجزئة في اختبارنا. [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]

التفويض والتحكم
نوع العرض يربط 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]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
