2010-08-12 85 views
14

Làm cách nào để tìm hiểu kích thước bộ nhớ của cấu trúc dữ liệu Python? Tôi đang tìm kiếm một cái gì đó như:kích thước bộ nhớ của cấu trúc dữ liệu Python

sizeof({1:'hello', 2:'world'}) 

Thật tuyệt vời nếu nó đếm mọi thứ một cách đệ quy. Nhưng ngay cả một kết quả cơ bản không đệ quy cũng giúp. Về cơ bản, tôi muốn có được cảm giác về các tùy chọn triển khai khác nhau như tuple v.s. liệt kê v.s. về mặt bộ nhớ. Nó quan trọng bởi vì tôi đang lập kế hoạch để có hàng triệu đối tượng được khởi tạo.

Nền tảng dev hiện tại của tôi là CPython 2.6.

+0

Đó sẽ là chương trình * thực sự * chậm, trừ khi bạn có nhiều bộ nhớ. Cộng với kích thước của bảng tra cứu sẽ là khá lớn (hàng triệu đối tượng?). Chỉ cần nói rằng ' –

+1

[namedtuple] (http://docs.python.org/dev/library/collections.html#namedtuple-factory-function-for-tuples-with-named-fields) là một lựa chọn tốt để sử dụng các lớp như khoảng trống được yêu cầu bởi mỗi cá thể giống như một bộ tuple. Nếu bạn có nhiều phiên bản của một lớp, bạn nên xem xét ['__slots__'] (http://docs.python.org/reference/datamodel.html#slots) –

Trả lời

20

Hãy xem hàm sys.getsizeof. Theo tài liệu, nó trả về kích thước của một đối tượng theo byte, như được đưa ra bởi phương thức __sizeof__ của đối tượng.

Daniel được chỉ ra trong nhận xét, nó không đệ quy; nó chỉ đếm các byte bị chiếm đóng bởi chính đối tượng, chứ không phải các đối tượng khác mà nó đề cập đến. This recipe for a recursive computation được liên kết với tài liệu Python 3.

+0

Cảm ơn. Điều này làm việc cho tôi! –

Các vấn đề liên quan