Trong nhận xét, OP đề cập đến bloat "trong cơ sở dữ liệu" - nhưng không có thông tin về cơ sở dữ liệu mà anh ta đang nói đến; từ các thông tin nhỏ trong bình luận đó, có vẻ như các lát chuỗi Python không nhất thiết là những gì liên quan, thay vào đó, việc "cắt" sẽ được thực hiện bởi động cơ DB khi truy xuất.Nếu đó là tình hình thực tế thì tôi sẽ đề nghị các nguyên tắc chung chống lại việc lưu trữ thông tin dư thừa trong DB - một "hình thức bình thường" (có thể trong một cảm giác lỏng lẻo của biểu thức ;-) theo đó thông tin được lưu trữ chỉ một lần và có nguồn gốc thông tin được tính toán lại (hoặc phí lưu trữ của động cơ DB, vv ;-) nên là chuẩn mực, và "không chuẩn hóa" bằng cách cố ý lưu trữ thông tin có nguồn gốc rất nhiều ngoại lệ và chỉ khi được chứng minh bằng nhu cầu hiệu suất cụ thể, được đo tốt.
Nếu tham chiếu đến "cơ sở dữ liệu" là một sai lệch ;-), hoặc được sử dụng theo nghĩa lỏng lẻo như tôi đã làm cho "biểu mẫu bình thường" ở trên ;-), thì có thể áp dụng cân nhắc khác: vì chuỗi Python không thay đổi được, nó có vẻ là tự nhiên khi không phải cắt lát bằng cách sao chép, nhưng thay vì có mỗi phần tái sử dụng một phần của không gian bộ nhớ của cha mẹ nó đang được cắt từ (nhiều như được thực hiện cho các mảng mảng '). Tuy nhiên, đó không phải là một phần của lõi Python. Tôi đã từng thử một bản vá cho mục đích đó, nhưng vấn đề thêm một tham chiếu đến chuỗi lớn và do đó làm cho nó ở trong bộ nhớ chỉ vì một chuỗi con nhỏ của nó vẫn được tham chiếu rộng rãi cho thích ứng với mục đích chung. Tuy nhiên nó sẽ có thể làm cho một lớp con mục đích đặc biệt của chuỗi (và một trong unicode) cho trường hợp trong đó lớn "cha mẹ" chuỗi cần phải ở lại trong bộ nhớ anyway. Hiện tại buffer
có một chút xíu, nhưng bạn không thể gọi các phương thức chuỗi trên đối tượng đệm (không rõ ràng sao chép nó vào đối tượng chuỗi đầu tiên), vì vậy nó chỉ thực sự hữu ích cho đầu ra và một vài trường hợp đặc biệt ... không có khối khái niệm thực sự chống lại phương pháp thêm chuỗi (tôi nghi ngờ rằng sẽ được thông qua trong lõi, nhưng nó nên được decently dễ dàng để duy trì như là một mô-đun bên thứ ba anyway ;-).
Giá trị của cách tiếp cận này khó có thể được chứng minh một cách chắc chắn bằng phép đo, theo cách này hay cách khác - tốc độ sẽ rất giống với phương pháp sao chép hoàn toàn hiện tại; lợi thế sẽ hoàn toàn giảm về lượng bộ nhớ, điều này sẽ không làm cho bất kỳ mã Python nào được đưa ra nhanh hơn, mà là cho phép một chương trình nào đó thực thi trên máy với RAM ít hơn một chút, hoặc nhiều tác vụ tốt hơn khi một vài trường hợp đang được sử dụng cùng một lúc trong các quy trình riêng biệt. Xem rope để có cách tiếp cận tương tự nhưng phong phú hơn khi được thử nghiệm trong ngữ cảnh của C++ (nhưng lưu ý rằng nó không làm cho nó thành tiêu chuẩn ;-).
Nguồn
2009-08-17 15:11:52
Tại sao bạn không dùng thử? Viết một bài kiểm tra đơn giản. –
Tôi đồng ý và lên tiếng bình chọn balpha nhưng tôi luôn tự hỏi làm thế nào nhanh chóng là các lát Python. Tôi sử dụng nó tất cả các thời gian dễ dàng như một sự chỉ định đơn giản, nhưng tôi chắc chắn rằng nó khá chậm hơn thế. –
-1: không thực hiện bất kỳ thử nghiệm thời gian nào. –