在Javascript&中为不同的数据类型分配了多少内存。蟒蛇?

时间:2017-06-13 15:04:52

标签: javascript python-3.x

我想知道不同数据类型在Python和Javascript中占用了多少内存。我知道您不需要在两种语言中声明类型,但不要忘记它们是 动态 类型语言

1 个答案:

答案 0 :(得分: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个字节,它随着字符串的长度线性增长。

接下来,让我们探索列表,词组,元组和&amp;套,

>>> 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 docs here中阅读更多有关Python内存管理的内容。