2017-06-13 49 views
3

我想知道有多少内存不同的数据类型在Python和Javascript.I占用知道,你并不需要在这两种语言宣布类型,但不要忘了他们是动态类型语言在Javascript和Python中为不同的数据类型分配了多少内存?

+2

这是一个很好的问题,但如果将问题分解为两个问题,每个语言一个问题,您可能会有更多的运气获得答案。 另外,我想你会发现答案是非常依赖的实现(尤其是与JS)。 –

+1

问题是需要更多的时间发布两个问题,因为我需要等待两天才能发布另一个问题,所以我只是将它发布到一个,另一个原因是因为我也想要一个有效的比较。 –

+1

啊,我明白了。我仍然认为这是一个很好的问题(我+1),只是认为你可以更轻松地获得单独的答案。 –

回答

1

对于Python 3的情况下,我们来探讨存储的量来计算每个基本数据类型消耗,

首先,让我们定义一个辅助函数sizeof这将有助于我们探索,

import sys 
def sizeof(x): 
    print(x.__class__, sys.getsizeof(x), x) 

与64位的Python 3.6.1运行此,这里的结果:

>>> sizeof(None) 
<class 'NoneType'> 16 None 

None需要16个字节。接下来让我们探索整数,

>>> sizeof(10) 
<class 'int'> 28 10 
>>> sizeof(2**64) 
<class 'int'> 36 18446744073709551616 
>>> sizeof(2**128) 
<class 'int'> 44 340282366920938463463374607431768211456 

整数在python是任意精度和上述理所当然表现出的行为,尺寸在所表示的整数的对数呈线性增长。

>>> sizeof(0.0) 
<class 'float'> 24 0.0 
>>> sizeof(10.0**100) 
<class 'float'> 24 1e+100 
>>> sizeof(10.0**308) 
<class 'float'> 24 1e+308 

浮标在python似乎是恒定的大小(24个字节)的!

>>> sizeof("") 
<class 'str'> 49 
>>> sizeof("A") 
<class 'str'> 50 A 
>>> sizeof("AB") 
<class 'str'> 51 AB 
>>> sizeof("ABC") 
<class 'str'> 52 ABC 

string是49个字节,它与字符串的长度线性地增长。

接着,让探索列表,http://stardict.sourceforge.net/Dictionaries.php下载,元组&套,

>>> sizeof([]) 
<class 'list'> 64 [] 
>>> sizeof([1,2,3,4,5,6,7,8,9,10]) 
<class 'list'> 144 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

list占用64个字节,它生长用元件的数量。

>>> sizeof(()) 
<class 'tuple'> 48() 
>>> sizeof((1,)) 
<class 'tuple'> 56 (1,) 
>>> sizeof((1,2,3,4,5,6,7,8,9,10,)) 
<class 'tuple'> 128 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 

一个空的tuple占用48个字节,它随元素数量增长。

>>> sizeof({}) 
<class 'dict'> 240 {} 
>>> sizeof({"a" : 1}) 
<class 'dict'> 240 {'a': 1} 
>>> a = {} 
>>> for i in range(20): 
...  a[i] = i**2 
... 
>>> sizeof(a) 
<class 'dict'> 648 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100, 11: 121, 12: 144, 13: 169, 14: 196, 15: 225, 16: 256, 17: 289, 18: 324, 19: 361} 

一个空的dict占用240个字节,它随元素数量增长。

>>> sizeof(set()) 
<class 'set'> 224 set() 
>>> sizeof({1}) 
<class 'set'> 224 {1} 
>>> sizeof({1,2,3,4,5,6,7,8,9,10}) 
<class 'set'> 736 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 

空的set占用224个字节,它随着元素的数量而增长。

这就是我在python中对各种数据类型的内存消耗的简要介绍。 Python中的内存管理非常简单 - 如果你只是不在乎但是它在你缩放时证明是个挑战!

您在theano文档here中阅读了关于Python内存管理的更多内容。

+0

我认为有10个项目的集合比包含20个项目的字典更大有点奇怪。 –

+0

更令人惊讶的是,10个独特元素的“frozenset”占用1248字节的内存,比可变集多512字节! – sayan