Giả sử tôi tạo python lists
theo hai cách.
Tại sao danh sách có cùng dữ liệu có kích thước khác nhau?
Trong trường hợp đầu tiên tôi sử dụng phân đơn giản:
my_list = []
print(my_list, '->', my_list.__sizeof__())
my_list = [1]
print(my_list, '->', my_list.__sizeof__())
my_list = [1, 1]
print(my_list, '->', my_list.__sizeof__())
Trong trường hợp thứ hai tôi sử dụng append()
phương pháp trên danh sách:
my_list = []
print(my_list, '->', my_list.__sizeof__())
my_list.append(1)
print(my_list, '->', my_list.__sizeof__())
my_list.append(1)
print(my_list, '->', my_list.__sizeof__())
Nhưng tôi nhận được bất ngờ (cho tôi) đầu ra:
=== WITH ASSIGNMENT ===
([], '->', 40)
([1], '->', 48)
([1, 1], '->', 56)
=== WITH APPEND ===
([], '->', 40)
([1], '->', 72)
([1, 1], '->', 72)
Điều gì xảy ra bên trong với bộ nhớ Python manag ement? Tại sao các danh sách 'cùng' có kích thước khác nhau?
Tôi đoán vì khi bạn tạo danh sách dưới dạng Python nghĩa đen chỉ định kích thước cụ thể cần thiết, trong khi khi bạn thêm vào, nó sẽ mở rộng nhiều hơn mức được yêu cầu trên giả định rằng bạn sẽ không nối thêm một lần nữa. – jonrsharpe
[nội bộ của truy cập danh sách python và định lại thời gian chạy lại] (https://stackoverflow.com/questions/5932328/internals-of-python-list-access-and-resizing-runtimes) – anuragal