我正在开发一个涉及从保存在内存中的大型列表中访问数据的项目.因为列表非常庞大(数百万行),所以我会关注使用多少内存.我使用OS X,因此我在创建这些列表时保持Activity Monitor处于打开状态.
我注意到列表使用的内存量可能会有很大差异,具体取决于它的构造方式,但我似乎无法弄清楚原因.
现在来看一些示例代码:
(我在OSX 10.8.3上使用Python 2.7.4)
下面的第一个函数创建一个列表,并用相同的三个随机数填充它.
下面的第二个函数创建一个列表,并用所有不同的随机数填充它.
import random
import sys
def make_table1(size):
list1 = size *[(float(),float(),float())] # initialize the list
line = (random.random(),
random.random(),
random.random())
for count in xrange(0, size): # Now fill it
list1[count] = line
return list1
def make_table2(size):
list1 = size *[(float(),float(),float())] # initialize the list
for count in xrange(0, size): # Now fill it
list1[count] = (random.random(),
random.random(),
random.random())
return list1
Run Code Online (Sandbox Code Playgroud)
(首先让我说,我意识到上面的代码可以更有效地编写.它是用这种方式编写的,以保持两个示例尽可能相似.)
现在我使用这些函数创建一些列表:
In [2]: thing1 = make_table1(6000000)
In [3]: sys.getsizeof(thing1)
Out[3]: …Run Code Online (Sandbox Code Playgroud)