مشكلة ربط القائمة في تهيئة القائمة مع [[]] * n
عند تهيئة قائمة القوائم باستخدام [[]] n، غالبًا ما يواجه المبرمجون مشكلة غير متوقعة حيث تبدو القوائم مرتبطة ببعضها البعض. يحدث هذا لأن بناء الجملة [x] n ينشئ مراجع متعددة لنفس كائن القائمة الأساسي، بدلاً من إنشاء مثيلات قائمة مميزة.
لتوضيح المشكلة، ضع في اعتبارك التعليمة البرمجية التالية:
x = [[]] * 3 x[1].append(0) print(x)
مخرجات هذا الكود هي:
[[0], [0], [0]]
بدلاً من المخرجات المتوقعة:
[[], [0], []]
تنبع المشكلة من حقيقة أن كل عنصر في القائمة هو مرجع لنفس كائن القائمة. عندما يتم تعديل أحد العناصر، تتأثر جميع العناصر الأخرى.
لإنشاء قائمة من القوائم المتميزة حقًا، فإن النهج الصحيح هو استخدام فهم القائمة:
x = [[] for i in range(3)]
ينشئ بناء الجملة هذا كائن قائمة جديدًا لكل عنصر في القائمة، مما يضمن استقلالهم.
التعليمات البرمجية التالية بمثابة عرض توضيحي:
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3