我想知道不同数据类型在Python和Javascript中占用了多少内存。我知道您不需要在两种语言中声明类型,但不要忘记它们是 动态 类型语言
答案 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内存管理的内容。