Trong trường hợp này, vì các chuỗi khá ngắn, và có quá nhiều trong số chúng, bạn đứng để tiết kiệm một chút dung lượng bộ nhớ bằng cách sử dụng intern
trên các chuỗi. Giả sử chỉ có chữ thường trong các chuỗi, đó là 26 * 26 = 676 chuỗi có thể, vì vậy phải có nhiều lần lặp lại trong danh sách này; intern
sẽ đảm bảo rằng những lần lặp lại đó không dẫn đến các đối tượng duy nhất, nhưng tất cả đều đề cập đến cùng một đối tượng cơ sở.
Có thể Python đã thực hiện chuỗi ngắn; nhưng nhìn vào một số nguồn khác nhau, có vẻ như điều này phụ thuộc rất nhiều vào việc triển khai thực hiện. Vì vậy, gọi số intern
trong trường hợp này là có thể là cách để đi; YMMV.
Là một xây dựng trên tại sao điều này là rất có khả năng tiết kiệm bộ nhớ, hãy xem xét những điều sau đây:
>>> sys.getsizeof('')
40
>>> sys.getsizeof('a')
41
>>> sys.getsizeof('ab')
42
>>> sys.getsizeof('abc')
43
Thêm nhân vật duy nhất để một chuỗi bổ sung thêm chỉ một byte với kích thước của chuỗi chính nó, nhưng mỗi chuỗi chiếm 40 byte riêng của nó.
Bây giờ tôi đã học được rằng trăn nói chung là khá tốn bộ nhớ. Như bạn đã chỉ ra một cách chính xác, độ dài của các chuỗi không phải là vấn đề ở đây, mà là kích thước tối thiểu của các đối tượng. Tôi hơi sốc khi phát hiện ra rằng kích thước của một int đơn giản là 24 byte (trên hệ thống 64 bit). Điều cần biết ... –