Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中为不同数据类型分配了多少内存&;python_Javascript_Python 3.x - Fatal编程技术网

Javascript中为不同数据类型分配了多少内存&;python

Javascript中为不同数据类型分配了多少内存&;python,javascript,python-3.x,Javascript,Python 3.x,我想知道Python和Javascript中不同的数据类型占用了多少内存。我知道您不需要在这两种语言中声明类型,但不要忘记它们是动态的类型化语言,让我们研究一下每种基本数据类型消耗的存储量 首先,让我们定义一个helper函数sizeof,它将帮助我们探索 import sys def sizeof(x): print(x.__class__, sys.getsizeof(x), x) 使用64位Python 3.6.1运行此操作,结果如下: >>> sizeof(N

我想知道Python和Javascript中不同的数据类型占用了多少内存。我知道您不需要在这两种语言中声明类型,但不要忘记它们是动态的类型化语言,让我们研究一下每种基本数据类型消耗的存储量

首先,让我们定义一个helper函数
sizeof
,它将帮助我们探索

import sys
def sizeof(x):
    print(x.__class__, sys.getsizeof(x), x)
使用64位Python 3.6.1运行此操作,结果如下:

>>> sizeof(None)
<class 'NoneType'> 16 None
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
一个空的
列表
占用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)
>>> 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}
>>> 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}
一个空的
dict
占用240字节,它随着元素的数量而增长

>>> 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)
>>> 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}
>>> 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}
>sizeof(set())
224套()
>>>sizeof({1})
224 {1}
>>>sizeof({1,2,3,4,5,6,7,8,9,10})
736 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
一个空的
集合
占用224字节,它随着元素的数量而增长

>>> 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)
>>> 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}
>>> 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}
这就结束了我对
python
中各种数据类型的内存消耗的简要探索。如果您不在意,Python中的内存管理很容易,但当您进行扩展时,它将被证明是一个挑战


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

这是一个很好的问题,但是如果您将其分为两个问题,每种语言一个问题,您可能会幸运地得到答案。另外,我想你会发现答案是非常依赖于实现的(尤其是JS)。问题是发布两个问题需要更多的时间,因为我需要等待两天才能发布另一个问题,所以我只在其中一个问题中发布了它,另一个原因是我还想进行有效的比较。啊,我明白了。我仍然认为这是一个很好的问题(我+1)只是认为你可以更容易地用单独的答案获得答案。谢谢你的建议,先生,我会在我未来的问题中尝试实施这些建议。在JS中,这取决于类型的使用方式。例如,整数数组就是整数数组,直到它需要一个
null
String
元素,并且它被去优化为一个装箱类型,该类型对数字使用双精度,对字符串使用2字节字符。在JS中,日期和布尔是数字,是双倍的。regexp差异很大,类型化数组不需要解释。我忘了什么吗?我觉得有点奇怪,一个包含10个项目的集合比一个包含20个项目的字典大。更令人惊讶的是,一个包含10个唯一元素的
frozenset
占用1248字节的内存,比一个可变集合多512字节!