تقنية

asdict في بايثون: هل يبقى مرجعا القائمة مشتركين؟

حقلا Pair يشيران إلى القائمة نفسها قبل asdict
مرجع مشترك. [1] [2]

افحص الهوية بعد تحويل الحقول. [1] [2]

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

لا؛ في مثالنا يفصل asdict قائمتي الناتج. [1] [2]

  • حقلا Pair يشيران إلى قائمة [7] واحدة. [1] [2]
  • هوية مرجعي الأصل تعطي True. [1] [2]
  • هوية قائمتي القاموس الناتج تعطي False. [1] [2]
  • إضافة 9 للأولى لا تغير الثانية أو الأصل. [1] [2]
  • اختبرنا 3.12.14؛ القوائم عادية وغير دورية. [1] [2]

المثال

from dataclasses import (
 dataclass, asdict)
@dataclass
class Pair:
 bud: list
 leaf: list
x=[7]
p=Pair(x,x)
d=asdict(p)
print(p.bud is p.leaf)
print(d["bud"] is d["leaf"])
d["bud"].append(9)
print(x,d["leaf"])

[1] [2]

التحويل يتتبع كل حقل

المصدر يعيد إنشاء القائمة لكل حقل. المخرجات True ثم False ثم [7] [7]. [1] [2]

asdict يفصل القائمتين وتعديل الأولى لا يغير الثانية
مساران منفصلان. [1] [2]

حد المثال

كانت القائمتان متساويتين قبل الإضافة، لكنهما مختلفتان في الهوية. أصبحت الأولى [7,9] وبقيت الثانية [7]. لا نعمم على كائنات بنسخ مخصص أو دورات. [1] [2]

المراجع

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

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

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