我想知道有多少内存不同的数据类型在Python和Javascript.I占用知道,你并不需要在这两种语言宣布类型,但不要忘了他们是动态类型语言在Javascript和Python中为不同的数据类型分配了多少内存?
回答
对于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内存管理的更多内容。
我认为有10个项目的集合比包含20个项目的字典更大有点奇怪。 –
更令人惊讶的是,10个独特元素的“frozenset”占用1248字节的内存,比可变集多512字节! – sayan
- 1. NSMutableArray arrayWithCapacity - 分配了多少内存?
- 2. Malloc - >分配了多少内存?
- 3. 在C++中为用户定义的类分配多少内存
- 4. 阵列数据类型内存分配
- 5. 枚举数据类型内存分配
- 6. 将分配的内存视为不同的类型
- 7. 在C++中,枚举数据类型消耗多少内存?
- 8. 为jvm进程分配了多少内存
- 9. C如何在内存中存储不同的数据类型?
- 10. 在初始化Object数组时,Java中分配了多少内存?
- 11. python中为空字典分配了多少空间?
- 12. 内存分配的值类型内参考类型在.net
- 13. 'managed_shared_memory'应该分配多少内存? (boost)
- 14. zlib,deflate:要分配多少内存?
- 15. malloc真正分配多少内存?
- 16. Python解释器如何为不同的方法分配内存?
- 17. 为什么不同数据类型的地址不同[Python]?
- 18. Python:不同类型的多维数组
- 19. 在Python中将Object数据类型的内容转换为Date数据类型
- 20. 有多少内存分配给这个类的对象?
- 21. 字符串数据类型占用了多少数据?
- 22. 了解Python分叉和内存分配错误
- 23. 为多维数组分配内存
- 24. 值类型和引用类型实时内存分配
- 25. 如何为XSD中的不同整数类型使用条件类型分配
- 26. 原始类型的内存分配
- 27. java类在内存中占用了多少时间
- 28. 数据分配和共享内存
- 29. 在SQLite中为String分配了多少空间?
- 30. 如何为索引中的ElasticSearch类型完成内存分配?
这是一个很好的问题,但如果将问题分解为两个问题,每个语言一个问题,您可能会有更多的运气获得答案。 另外,我想你会发现答案是非常依赖的实现(尤其是与JS)。 –
问题是需要更多的时间发布两个问题,因为我需要等待两天才能发布另一个问题,所以我只是将它发布到一个,另一个原因是因为我也想要一个有效的比较。 –
啊,我明白了。我仍然认为这是一个很好的问题(我+1),只是认为你可以更轻松地获得单独的答案。 –