Các chuỗi trong Python là không thay đổi và hỗ trợ giao diện bộ đệm. Vì vậy, nó sẽ là hiệu quả để trả về không phải là chuỗi mới, nhưng các phần của chuỗi cũ khi sử dụng phương thức slices hoặc split(). Nhưng, cho đến nay như tôi biết, đối tượng chuỗi mới được xây dựng mỗi lần. Tại sao nó như vậy? Lý do duy nhất tôi thấy là nó có thể làm cho một bộ sưu tập rác một chút khó khăn hơn.Chuỗi bất biến của Python và các lát của chúng
Đúng: theo định kỳ thông thường, phí trên bộ nhớ là tuyến tính và không đáng chú ý: sao chép nhanh, tôi tin là phân bổ. Nhưng có quá nhiều việc được thực hiện trong python để nói rằng nó không đáng để nỗ lực!
EDIT:
Dường như việc sử dụng cách này sẽ làm cho việc quản lý bộ nhớ trở nên phức tạp hơn. Trường hợp, trong đó 1/5 của chuỗi tùy ý chỉ được sử dụng, và chúng ta không thể deallocate toàn bộ chuỗi, là một ví dụ simle. Chúng tôi có thể cải thiện cấp phát bộ nhớ, do đó, nó sẽ có thể deallocate dây một phần, nhưng nó sẽ có lẽ chủ yếu là disprovement. Tất cả các chức năng tiêu chuẩn có thể được mô phỏng bằng bộ đệm hoặc bộ nhớ, nếu việc sử dụng bộ nhớ cực kỳ quan trọng. Có, mã sẽ không được như vậy ngắn gọn, nhưng chúng ta phải từ bỏ một cái gì đó để có được một cái gì đó.
Bạn sẽ trả về các phần của chuỗi như thế nào? Bạn có nghĩa là con trỏ đến nó? điều gì sẽ xảy ra với chuỗi con nếu chuỗi gốc bị xóa? –
Điều gì sẽ trở thành bộ đệm, nếu đối tượng gốc bị xóa? Tôi nghĩ, bộ sưu tập rác là đủ thông minh và không xóa đối tượng gốc. – gukoff
Tôi tin rằng câu hỏi của bạn là bản sao của [Nếu chuỗi không thay đổi trong .NET, thì tại sao chuỗi con lại sử dụng thời gian O (n)?] (Http://stackoverflow.com/questions/6742923/if-strings-are-immutable -in-net-then-why-does-substring-take-on-time). Cùng một đối số hợp lệ cho python. – Bakuriu