تقنية

dict.copy في بايثون: هل تنفصل القائمة الداخلية؟

القاموسان مختلفان؛ قائمتهما الداخلية واحدة.
هوية الكائنات.

dict.copy تنشئ نسخة سطحية؛ القائمة الداخلية تبقى مشتركة. [1]

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

لا؛ استقلال القاموس لا يعني استقلال قائمته. [1]

  • dict.copy تنشئ نسخة سطحية؛ القائمة الداخلية تبقى مشتركة. [1]
  • النسخ السطحي ينشئ كائنًا مركبًا جديدًا، ويضع فيه مراجع إلى كائنات الأصل. [1]
  • مثال مؤلف على CPython 3.12.14: d={"r":[4]}؛ c=d.copy()؛ القاموسان مختلفان والقائمة واحدة. [1]
  • بعد c["r"].append(9)، تصبح قائمة كل منهما [4,9]. [1]
  • ثم c["r"]=[7] يغيّر ربط النسخة فقط؛ قائمة d تبقى [4,9]. [1]

قائمة مشتركة

dict.copy تنشئ نسخة سطحية؛ القائمة الداخلية تبقى مشتركة. [1]

معنى السطحية

النسخ السطحي ينشئ كائنًا مركبًا جديدًا، ويضع فيه مراجع إلى كائنات الأصل. [1]

قاموس جديد

مثال مؤلف على CPython 3.12.14: d={"r":[4]}؛ c=d.copy()؛ القاموسان مختلفان والقائمة واحدة. [1]

c=d.copy() [1]

الإضافة تظهر في الأصل والنسخة؛ الإسناد التالي يغير النسخة فقط.
تعديل وإسناد.

تعديل ثم إسناد

بعد c["r"].append(9)، تصبح قائمة كل منهما [4,9]. [1]

c["r"]=[7] [1]

ثم c["r"]=[7] يغيّر ربط النسخة فقط؛ قائمة d تبقى [4,9]. [1]

المراجع

  1. Python — shallow copy

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

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