编辑:Memory usage of a list of millions of strings in Python的答案也可以根据场景进行调整.
通过分析我的机器上的RAM使用情况(使用process manager),我注意到,像'abcd'
这样的一组数百万字符串比一组数百万字节b'abcd'
占用的内存要少得多(编辑:我错了,这是由于其他地方的错误).我想测试一下:
import random, string, sys
randomstring = lambda length: ''.join(random.choice(string.ascii_lowercase) for _ in range(length))
s1 = {randomstring(10) for i in range(100_000)}
s2 = {randomstring(50) for i in range(100_000)}
s3 = {randomstring(10).encode() for i in range(100_000)}
s4 = {randomstring(50).encode() for i in range(100_000)}
print(sys.getsizeof(s1), sys.getsizeof(s2), sys.getsizeof(s3), sys.getsizeof(s4))
但在这里,它总是给出相同的大小:4194528
,而大小应该随系数x5而变化,对于字符串和字节的情况,可能会有所不同.
How to measure the memory size taken by these sets and all its elements?
注意:我知道在Python中查找 struct 占用的全部内存并不容易(另请参见In-memory size of a Python structure),因为我们需要考虑所有链接的元素.
TL;DR:Python中有没有工具可以自动测量集合的内存大小+内部引用(指针)占用的内存,哈希表存储桶,集合中承载的元素(这里是字符串...?简而言之:这组字符串所需的每个字节.有这样的记忆测量工具吗?