Pickle.dump(obj) 转储包含完全相同值但转储文件大小不同的两个列表

Pickle.dump(obj) dumps two lists that conatain exactly the same values but dump file has a diffrent size

我正在创建进行大量独立计算的软件并行化,这样研究所就不会花 6 个小时来计算一个 运行。这些结果保存在数组列表中。数组长度是静态的。然后使用 pickle.dump(obj).

转储此列表

不同之处在于单线程的大小为 6.5 KiB,多线程的大小为 20,4 KiB

首先: 我做了我的研究,是的,你不应该使用泡菜,但大学就是大学。我还测试了我的多线程实现,我在最后几天这样做了,我什至手动比较了一个较小的样本来确定,所以当你推荐我应该检查我的多线程实现时,我没有帮助。

现在我做了什么: 首先,比较所有元素,在单线程和多线程创建的列表之间,它们是相同的。比较长度,形状,sys.getsizeof(obj) 是一样的。 然后我查看了 pickle.dump(obj),它自行选择协议,因此我尝试使用不同的协议。我得到了不同的结果,但不是我预期的较小的结果。

最后我检查了我是否真的只转储了列表,是的,只转储了列表。

正如上面所写,人们希望为完全相同的列表获得完全相同的转储文件大小,那么为什么这没有发生?

是的,我是新来的,不了解所有规则,所以请就如何改进问题提供适当的反馈。

所以解决方案相当简单...

我还应该检查数组中元素的类型。在晚上的编码部分,我使用 numpy 将列表与计算值进行分区,然后完全忘记了它。

用一个简单的 array.tolist() 就解决了这个问题。

结论: 即使在 python 检查你的类型!