Hướng dẫn dictionary vs list memory usage python - từ điển so với danh sách sử dụng bộ nhớ python
Bạn thực sự nhận được một hình ảnh không hoàn chỉnh về việc sử dụng bộ nhớ trong trường hợp này. Tổng kích thước của một từ điển nhiều hơn gấp đôi trong các khoảng thời gian không đều và nếu bạn so sánh kích thước của hai cấu trúc này ngay sau khi kích thước từ điển đã tăng lên, nó lại lớn hơn. Một tập lệnh đơn giản với hàm kích thước đệ quy (xem mã bên dưới) hiển thị một mẫu khá rõ ràng: Show
Mô hình này tiếp tục khi
Nó không thực sự quan trọng nếu tất cả những gì bạn quan tâm là bộ nhớ. Tuy nhiên, lưu ý rằng việc lặp lại trên một từ điển thường chậm hơn một chút so với lặp lại trong danh sách, bởi vì không có cách nào tốt để tránh lặp đi lặp lại trên tất cả các thùng rỗng trong từ điển. Vì vậy, có một chút sự đánh đổi - từ điển nhanh hơn (nhiều) trong việc tìm kiếm chính ngẫu nhiên, nhưng danh sách (một chút) nhanh hơn khi lặp. Từ điển có thể sẽ tốt hơn hầu hết thời gian, nhưng trong một số trường hợp hiếm hoi, danh sách có thể cung cấp tối ưu hóa vi mô. Đây là mã kiểm tra kích thước. Nó có thể sẽ không tạo ra kết quả chính xác cho tất cả các trường hợp góc, nhưng nó nên xử lý các cấu trúc đơn giản như thế này mà không gặp vấn đề gì. (Nhưng hãy cho tôi biết nếu bạn thấy bất kỳ vấn đề nào.)
Giới thiệuTrong bài đăng này, chúng tôi muốn đánh giá dấu chân bộ nhớ trong Python 3 của dữ liệu được lưu trữ ở các định dạng dạng bảng khác nhau. Cụ thể, chúng tôi muốn so sánh các khung dữ liệu, với các cấu trúc dữ liệu giống JSON như danh sách từ điển và từ điển của danh sách. Trên đây là 3 cách khác nhau để lưu trữ dữ liệu giống như bảng. Dữ liệu giống như bảng về cơ bản là dữ liệu được biểu thị bằng các hàng và cột. Trong bài kiểm tra này, chúng tôi sẽ bỏ qua bất kỳ câu hỏi nào liên quan đến đọc/ghi hiệu quả hoặc tra cứu. Chúng tôi hoàn toàn quan tâm đến một câu hỏi: cách tiếp cận nào sẽ giúp chúng tôi tiết kiệm nhiều trí nhớ nhất? Bộ dữ liệuChúng tôi tạo ra một bộ dữ liệu thử nghiệm vô nghĩa (nhưng rất lớn) cho thí nghiệm này, sử dụng danh sách một số giống chó phổ biến. Danh sách này chắc chắn hoàn toàn không thiên vị, và tất cả chúng chắc chắn là những con chó. Để đảm bảo rằng thử nghiệm đủ chung cho hầu hết các trường hợp sử dụng, chúng tôi đảm bảo rằng bộ dữ liệu này có ít nhất ba loại dữ liệu nguyên thủy: STR, INT và FLOAT. Thí nghiệmChúng tôi chạy các tính toán đơn giản cho từng biến thể cấu trúc dữ liệu. DataFramesĐo lường bộ nhớ của DataFrames tương đối đơn giản và có thể được thực hiện với chức năng tích hợp đơn giản: Điều này cho kết quả sau: Danh sách từ điểnĐo lường danh sách từ điển không đơn giản như ở trên. Để có được kích thước của cấu trúc dữ liệu Python bản địa, chúng ta có thể sử dụng phương pháp Ví dụ: nếu một người có một danh sách các số nguyên Do đó, người ta phải lặp lại từng đối tượng trong danh sách và mỗi cặp giá trị khóa trong mỗi từ điển để có được kích thước tích lũy của cấu trúc dữ liệu. Điều này cho kết quả sau: Danh sách từ điểnĐo lường danh sách từ điển không đơn giản như ở trên. Để có được kích thước của cấu trúc dữ liệu Python bản địa, chúng ta có thể sử dụng phương pháp
Ví dụ: nếu một người có một danh sách các số nguyên Điều này cho kết quả sau: Danh sách từ điểnĐo lường danh sách từ điển không đơn giản như ở trên.significantly smaller footprint than a list of dictionaries, and even a dictionary of lists. The latter are roughly 6 times and 2 times larger, respectively. Để có được kích thước của cấu trúc dữ liệu Python bản địa, chúng ta có thể sử dụng phương pháp Từ điển Python có chiếm rất nhiều bộ nhớ không?Nói cách khác, từ điển của chúng tôi, không có gì trong đó, tiêu thụ 240 byte.Không tệ;Với tần suất từ điển được sử dụng trong Python, thật tốt khi biết rằng chúng thường không tiêu thụ nhiều bộ nhớ đó.they don't normally consume that much memory.
Từ điển có nhanh hơn danh sách Python không?Một từ điển nhanh hơn 6,6 lần so với danh sách khi chúng tôi tra cứu trong 100 mục.6.6 times faster than a list when we lookup in 100 items.
Tại sao Dict nhanh hơn danh sách?Lý do là vì một từ điển là một tra cứu, trong khi một danh sách là một lần lặp.Từ điển sử dụng tra cứu băm, trong khi danh sách của bạn yêu cầu đi bộ qua danh sách cho đến khi tìm thấy kết quả từ việc bắt đầu đến kết quả mỗi lần.a dictionary is a lookup, while a list is an iteration. Dictionary uses a hash lookup, while your list requires walking through the list until it finds the result from beginning to the result each time.
Bao nhiêu bộ nhớ mà một danh sách mất trong Python?Khi bạn tạo một đối tượng Danh sách, đối tượng danh sách tự mình lấy 64 byte bộ nhớ và mỗi mục thêm 8 byte bộ nhớ vào kích thước của danh sách vì các tham chiếu đến các đối tượng khác.64 bytes of memory, and each item adds 8 bytes of memory to the size of the list because of references to other objects. |