擅长:python、mysql、java
<p><code>sys.getsizeof(some_dict)</code>说明了内部哈希表的大小,它与键的数量大致成正比。但是它没有考虑到键和值的大小,部分原因是这很难正确执行,部分原因是可能有许多其他对象引用,因此包含它们有点误导(例如,它们的大小可能会分摊到许多不同的<code>dict</code>上)。在</p>
<p>至于文件大小:除了这个<em>包含键和值的大小之外,值(整数)的编码方式不同,可能效率更低。<em>总体而言,</em>这可以通过一个<code>int</code>对象包含大量元数据并将实际数据取整为4到8个字节这一事实来平衡。其他因素:CSV文件包括逗号和换行符,哈希值通常是一个大数字,比许多短字符串大(<code>hash("a")</code>在我的机器上是-392375501)。在</p>
<p>旁注:使用<code>diction[hash(mykey1_)] = ...</code>构建的dict很可能是<strong>错误的</strong>。你在字典之外做散列,所以它不能保护你免受哈希冲突的影响。您可能会丢失一些值,因为它们的键散列为同一个整数。由于内部哈希表始终是2的幂次方,并且仅在某个阈值下调整大小,因此较少的几个条目不一定会显示在<code>sys.getsizeof</code>中。在</p>