सरल उत्तर: आधुनिक अजगर में प्रत्येक डेटा प्रकार एक वर्ग है, इसलिए औपचारिक रूप से आपके द्वारा प्रस्तावित दो समाधानों के बीच कोई अंतर नहीं है। (कृपया नई शैली की कक्षाओं का उपयोग करना याद रखें: क्लासिक कक्षाएं अप्रचलित हैं! Http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes देखें )
अब सवाल यह होना चाहिए: मैं अजगर में एक कुशल डेटा संरचना कैसे व्यवस्थित करूं? कोई शक नहीं कि की एक सरणी के रूप में कोशिकाओं के आयोजन के विचार नहीं है class Cell
उदाहरणों है जिस तरह से भी अक्षम। आप एक जटिल लिंक्ड सूची की तरह व्यवस्थित किए गए पॉइंटर्स और गैर-सन्निहित डेटा की गड़बड़ी को समाप्त करेंगे। आप निश्चित रूप से अपनी सूची में नई कोशिकाओं को आसानी से सम्मिलित करने की क्षमता रखते हैं: लेकिन क्या आपको इस सुविधा की आवश्यकता है? इसके विपरीत आपके पास गैर-सन्निहित डेटा संग्रहण होगा, और आपको प्रत्येक सेल को अप्रत्यक्ष के विभिन्न स्तरों तक पहुंच प्राप्त करनी होगी।
यदि आप अपने डेटा को एक numpy.ndarray
मेमोरी के रूप में व्यवस्थित करते हैं, तो डेटा मेमोरी-रिग्रेसिव है, और विभिन्न सेल तक पहुंच बस आपके मेमोरी ब्लॉक के माध्यम से स्ट्रैडिंग होती है: स्पेस एफिशिएंट (पॉइंटर्स के लिए कोई मेमोरी बर्बाद नहीं) और तेज ।
जैसा कि एथन द्वारा बताया गया है, OO अवधारणाओं का उपयोग किया जाना चाहिए, लेकिन उच्च स्तर पर, एक बार एक कुशल निम्न स्तर की डेटा संरचना को लागू किया गया है, आमतौर पर numpy.ndarray
's के माध्यम से ।
OO प्रोग्रामिंग का मतलब उन तरीकों से डेटा को बाइंड करना है जो डेटा को खुद एब्सट्रैक्शन के उच्च स्तर पर संचालित करते हैं। (एक उदाहरण: मैंने एक FEM कोड लागू किया है जिसमें कठोरता मैट्रिक्स को एक वर्ग के रूप में परिभाषित किया गया था जिसमें विरल सुपर-नोडल चोल्स्की कारक के लिए एक विधि थी। पहला कार्यान्वयन कोर था: जब एक आउट-ऑफ-कोर कार्यान्वयन की आवश्यकता थी, तो यह था। डेटा संग्रहण को रेखांकित करने के लिए विरासत और न्यूनतम समायोजन के माध्यम से प्राप्त किया गया था । सुपर-नोडल चॉल्स्की कोड का लगभग 100% पुन: उपयोग किया गया था।)
एक अंतिम टिप्पणी, लेकिन महत्वपूर्ण: एक कुशल संख्यात्मक प्रक्रिया एक एल्गोरिथ्म की स्मार्ट मैपिंग और आपके कंप्यूटर कंप्यूटिंग संरचना के लिए एक डेटा संरचना का परिणाम है। यदि आप गलत डेटा संरचना से शुरू करते हैं, तो पूरी तरह से फिर से लिखे बिना दक्षता को पुनर्प्राप्त करने का कोई तरीका नहीं है ।