"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا ترتبط القوائم ببعضها البعض عند استخدام [[]] * n في تهيئة قائمة بايثون؟

لماذا ترتبط القوائم ببعضها البعض عند استخدام [[]] * n في تهيئة قائمة بايثون؟

تم النشر بتاريخ 2024-11-05
تصفح:203

Why Do Lists Linked Together When Using [[]] * n in Python List Initialization?

مشكلة ربط القائمة في تهيئة القائمة مع [[]] * 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
بيان الافراج أعيد طبع هذه المقالة على: 1729212379 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3