我需要一個非常大的列表,並且試圖弄清楚我可以做到多大,以便它仍然適合1-2GB的RAM。我在64位(x86_64)上使用CPython實現。Python:列表的每個元素需要多少空間?
編輯:感謝bua的回答,我已經填寫了一些更具體的答案。
什麼是(以字節爲單位)的空間(內存)用法:
- 列表本身
sys.getsizeof([]) == 72
- 各列表項(不包括數據)
sys.getsizeof([0, 1, 2, 3]) == 104
,所以8字節以上每個項目的頭。
- 數據,如果它是一個整數
sys.getsizeof(2**62) == 24
(而是變化的根據整數大小)sys.getsizeof(2**63) == 40
sys.getsizeof(2**128) == 48
sys.getsizeof(2**256) == 66
- 數據,如果它是一個對象(我猜想是
sizeof(Pyobject)
) )sys.getsizeof(C()) == 72
(C是一個空的用戶空間物體)
如果可以共享有關所觀察到的大小,這將是巨大更一般的數據。例如:
- 是否有特殊情況(我認爲不可變的值可能是共享的,所以也許一個bools列表不會爲數據佔用額外的空間)?
- 也許小的列表需要X字節的開銷,但大的列表需要Y字節的開銷?
你可能想用你添加的信息來回答你自己的問題,但是很明顯bua已經回答了你問題的主要部分,而EOL提供了一種更準確的預測方式和更多的內容到RAM中。 – 2009-11-05 14:32:33
這是發佈爲必須作爲鏈接唯一答案刪除的答案,但它似乎可能有用,所以我將其作爲評論發佈。本週的Python模塊做了一篇關於Python內存管理的文章,您可以在這裏查看:http://pymotw.com/2/sys/limits.html – ArtOfWarfare 2014-11-02 13:15:11