इसलिए मैं list
वस्तुओं के साथ खेल रहा था और थोड़ी अजीब बात यह पाई list
गई कि अगर list()
इसके साथ बनाया गया है, तो सूची बोध की तुलना में अधिक स्मृति का उपयोग होता है? मैं पायथन 3.5.2 का उपयोग कर रहा हूं
In [1]: import sys
In [2]: a = list(range(100))
In [3]: sys.getsizeof(a)
Out[3]: 1008
In [4]: b = [i for i in range(100)]
In [5]: sys.getsizeof(b)
Out[5]: 912
In [6]: type(a) == type(b)
Out[6]: True
In [7]: a == b
Out[7]: True
In [8]: sys.getsizeof(list(b))
Out[8]: 1008
से डॉक्स :
सूचियों का निर्माण कई तरीकों से किया जा सकता है:
- खाली सूची को दर्शाने के लिए चौकोर कोष्ठकों का उपयोग करना:
[]
- वर्ग कोष्ठक का उपयोग करना, अल्पविराम के साथ आइटम को अलग:
[a]
,[a, b, c]
- एक सूची समझ का उपयोग करना:
[x for x in iterable]
- टाइप कंस्ट्रक्टर का उपयोग करना:
list()
याlist(iterable)
लेकिन ऐसा लगता है कि list()
इसका उपयोग करने से अधिक मेमोरी का उपयोग होता है।
और जितना list
बड़ा होता है, खाई बढ़ती जाती है।
ऐसा क्यूँ होता है?
अद्यतन # 1
पायथन 3.6.0b2 के साथ टेस्ट:
Python 3.6.0b2 (default, Oct 11 2016, 11:52:53)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof(list(range(100)))
1008
>>> sys.getsizeof([i for i in range(100)])
912
अद्यतन # 2
पायथन 2.7.12 के साथ टेस्ट:
Python 2.7.12 (default, Jul 1 2016, 15:12:24)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getsizeof(list(xrange(100)))
1016
>>> sys.getsizeof([i for i in xrange(100)])
920
sys.getsizeof(list(range(100)))
पर 1016 है,getsizeof(range(100))
872 है औरgetsizeof([i for i in range(100)])
920 है। सभी का प्रकार हैlist
।