طفرة غير متوقعة في القائمة
عند إنشاء قائمة مثل v = [0,0,0,0,0,0,0,0 ,0]، قد تفترض أن تعيين قائمة جديدة لمتغير يؤدي إلى إنشاء مرجع منفصل. ومع ذلك، يمكن أن تظهر تعليمات برمجية مثل ما يلي سلوكًا غير متوقع:
vec = v
vec[5] = 5
يحتوي كل من vec وv الآن على القيمة 5 في الفهرس 5. لماذا يحدث هذا؟
التخصيص المرجعي
في بايثون، القوائم هي كائنات قابلة للتغيير. لا يؤدي تعيين vec = v إلى إنشاء نسخة جديدة من القائمة. بدلاً من ذلك، يقوم بتعيين مرجع إلى v. يشير كل من vec وv إلى نفس كائن القائمة الأساسي في الذاكرة.
أي تعديلات يتم إجراؤها على vec أو v ستؤثر على القائمة الأصلية لأنهما نفس القائمة. ولهذا السبب عندما يتم تغيير vec[5]، يتغير v أيضًا.
الحل
لإنشاء نسخة منفصلة من القائمة، استخدم الدالة list():
vec = list(v)
يؤدي هذا إلى إنشاء كائن قائمة جديد يحتوي على نسخة من العناصر من v. لن تؤثر أي تغييرات يتم إجراؤها على vec v، والعكس بالعكس.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3