जवाबों:
स्रोत कोड के अनुसार , एक सूची का अधिकतम आकार है PY_SSIZE_T_MAX/sizeof(PyObject*)
।
PY_SSIZE_T_MAX
pyport.h में परिभाषित किया गया है((size_t) -1)>>1
एक नियमित 32 बिट सिस्टम पर, यह (4294967295/2) / 4 या 536870912 है।
इसलिए एक 32 बिट सिस्टम पर एक अजगर सूची का अधिकतम आकार 536,870,912 तत्व है।
जब तक आपके पास तत्वों की संख्या समान या उससे कम है, तब तक सभी सूची फ़ंक्शन सही ढंग से काम करना चाहिए।
PyObject *
। वह चीज़ एक तथाकथित सूचक है (आप अंत में तारांकन के कारण उन्हें पहचानते हैं)। पॉइंटर्स 4 बाइट्स लंबे होते हैं और आवंटित ऑब्जेक्ट को मेमोरी एड्रेस स्टोर करते हैं। वे "केवल" 4 बाइट्स लंबे होते हैं क्योंकि 4 बाइट्स के साथ आप आजकल के कंप्यूटर की स्मृति में प्रत्येक तत्व को संबोधित कर सकते हैं।
PY_SSIZE_T_MAX
बहुत अधिक हो सकता है।
जैसा कि पायथन प्रलेखन कहता है :
sys.maxsize
प्लेटफ़ॉर्म के Py_ssize_t प्रकार द्वारा समर्थित सबसे बड़ा सकारात्मक पूर्णांक, और इस प्रकार अधिकतम आकार सूचियाँ, तार, dicts, और कई अन्य कंटेनर हो सकते हैं।
मेरे कंप्यूटर में (लिनक्स x86_64):
>>> import sys
>>> print sys.maxsize
9223372036854775807
sys.maxsize
सवाल का जवाब है। विभिन्न आर्किटेक्चर विभिन्न मैक्सिमा का समर्थन करते हैं।
यकीन है कि यह ठीक है। वास्तव में आप आसानी से अपने लिए देख सकते हैं:
l = range(12000)
l = sorted(l, reverse=True)
मेरी मशीन पर उन लाइनों को चलाना:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
लेकिन यकीन है कि जैसा बाकी सभी ने कहा। सरणी जितनी धीमी होगी संचालन उतना ही बड़ा होगा।
आकस्मिक कोड में मैंने लाखों तत्वों के साथ सूची बनाई है। मेरा मानना है कि पायथन का सूचियों का कार्यान्वयन केवल आपके सिस्टम पर मेमोरी की मात्रा से बंधा है।
इसके अलावा, सूची विधियों / कार्यों को सूची के आकार के बावजूद काम करना जारी रखना चाहिए।
यदि आप प्रदर्शन के बारे में परवाह करते हैं, तो एक पुस्तकालय जैसे कि NumPy में देखना सार्थक हो सकता है ।
सूचियों के लिए प्रदर्शन विशेषताओं को इफ्तोब पर वर्णित किया गया है।
पायथन सूचियां वास्तव में तेज यादृच्छिक अभिगम के लिए वेक्टर के रूप में कार्यान्वित की जाती हैं, इसलिए कंटेनर मूल रूप से कई वस्तुओं को धारण करेगा क्योंकि मेमोरी में जगह है। (आपको सूची में शामिल पॉइंटर्स के लिए जगह की आवश्यकता होती है और साथ ही ऑब्जेक्ट के लिए मेमोरी में जगह की ओर इशारा किया जाता है।)
लागू करना O(1)
(निरंतर स्थिर जटिलता है), हालांकि, अनुक्रम के बीच से हटाने / हटाने के लिए एक O(n)
(रैखिक जटिलता) पुन: व्यवस्थित करने की आवश्यकता होगी , जो आपकी सूची में तत्वों की संख्या के रूप में धीमी हो जाएगी।
आपका सॉर्टिंग प्रश्न अधिक बारीक है, क्योंकि तुलना ऑपरेशन समय की एक अनबिके समय ले सकता है। यदि आप वास्तव में धीमी तुलना कर रहे हैं, तो इसमें लंबा समय लगेगा, हालांकि यह पायथन की सूची डेटा प्रकार का कोई दोष नहीं है ।
रिवर्सल केवल सूची में सभी बिंदुओं को स्वैप करने के लिए आवश्यक समय की मात्रा लेता है (आवश्यक रूप से O(n)
(रैखिक जटिलता), क्योंकि आप प्रत्येक सूचक को एक बार छूते हैं)।
मैं कहूंगा कि आप केवल उपलब्ध राम की कुल राशि तक सीमित हैं। जाहिर है बड़े सरणी यह पर लंबे समय तक संचालन ले जाएगा।
मुझे यह x64 बिट सिस्टम पर यहाँ से मिला: Python 3.7.0b5 (v3.7.0b5: abb8802389, 31 मई 2018, 01:54:01) [MSC v.1913 64 bit (AMD64] win32 पर]
सूची संख्या की कोई सीमा नहीं है। आपकी त्रुटि का मुख्य कारण रैम है। कृपया अपनी मेमोरी का आकार अपग्रेड करें।
sizeof(PyObject*) == 4?
? यह क्या दर्शाता है?