2016年 12月 09日
In [1]: import sys
In [2]: sys.getsizeof(1)
Out[2]: 28
しかし、結果は28バイト。なんだかやらたに大きい。In [67]: for obj in [[],[1],[1,2],(),(1,2),{},{1},{1,2},{'a':1},{'a':1,'b':2}]:
....: print(sys.getsizeof(obj),'\t',obj)
....:
64 []
72 [1]
80 [1, 2]
48 ()
64 (1, 2)
288 {}
224 {1}
224 {1, 2}
288 {'a': 1}
288 {'a': 1, 'b': 2}
どうやら、数字を1つ増やすごとに8バイト増えるようだ。
空リストは64バイト、空タプルは48バイト、{}は空集合ではなく、空辞書になるようだ。
そして、集合や辞書は、要素数に比例して大きくなるのではなく、たぶん階段状に増えていくものと予想される。In [70]: for obj in ['','a','ab','abcdefghi','漢','漢字','?','+','+-*/']:
....: print(sys.getsizeof(obj),'\t',obj)
....:
49
58 a
51 ab
58 abcdefghi
76 漢
78 漢字
50 ?
50 +
53 +-*/
‘a’は58バイト、’ab’は51バイト。