"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पायथन सूची आरंभीकरण में [[]] * n का उपयोग करते समय सूचियाँ एक साथ क्यों जुड़ी होती हैं?

पायथन सूची आरंभीकरण में [[]] * n का उपयोग करते समय सूचियाँ एक साथ क्यों जुड़ी होती हैं?

2024-11-05 को प्रकाशित
ब्राउज़ करें:973

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 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3