تقنية

itertools.repeat في بايثون: هل تنسخ القائمة؟

موضعان يشيران إلى الأصل
فحص الهوية. [1] [2]

تكرار الموضع لا يعني إنشاء نسخة مستقلة. [1] [2]

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

لا؛ تعيد repeat قائمتنا الأصلية نفسها مرتين. [1] [2]

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

المثال

from itertools import repeat
x=[4]
rows=list(repeat(x,2))
print(rows[0] is x,rows[1] is x)
rows[0].append(7)
print(x)
print(rows)

[1] [2]

المرجع المشترك

المصدر يحفظ مرجع الكائن ويعيده عند القراءة. بناء النتيجة لم يغير الأصل؛ الإضافة اللاحقة تغيره عمدًا. لا نستدل من تساوي القيم وحده على الهوية. [1] [2]

الإضافة تظهر في الأصل والموضعين
بعد الإضافة. [1] [2]

تحكم مستقل

في تحكم جديد، نبدأ x=[4] ونبني [list(x) for _ in range(2)]. بعد إضافة 7 للأولى، تبقى الثانية والأصل [4]. هذا نسخ لقوائمنا المسطحة، وليس ضمانًا لنسخ عميق. [1] [2]

المراجع

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

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

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