Đây không chỉ là cách ưa thích, đó là cách hợp lý duy nhất. Bởi vì chuỗi là bất biến, để "loại bỏ" một char từ một chuỗi, bạn phải tạo một chuỗi mới bất cứ khi nào bạn muốn có một giá trị chuỗi khác nhau.
Bạn có thể tự hỏi tại sao chuỗi không thay đổi được, vì bạn phải tạo một chuỗi hoàn toàn mới mỗi khi bạn thay đổi ký tự. Sau khi tất cả, chuỗi C chỉ là mảng ký tự và do đó có thể thay đổi và một số ngôn ngữ hỗ trợ chuỗi rõ ràng hơn C cho phép các chuỗi có thể thay đổi được. Có hai lý do để có chuỗi bất biến: an ninh/an toàn và hiệu suất.
Bảo mật có lẽ là lý do quan trọng nhất đối với các chuỗi không thay đổi được. Khi các chuỗi không thay đổi, bạn không thể chuyển một chuỗi vào một số thư viện và sau đó có chuỗi thay đổi từ dưới chân của bạn khi bạn không mong đợi nó. Bạn có thể thắc mắc thư viện nào sẽ thay đổi tham số chuỗi, nhưng nếu bạn đang chuyển mã cho khách hàng, bạn không thể kiểm soát phiên bản thư viện chuẩn và khách hàng độc hại có thể thay đổi thư viện chuẩn của họ để phá vỡ chương trình của bạn và tìm hiểu thêm về nội bộ của nó. Các đối tượng không thay đổi cũng dễ dàng hơn để giải thích, điều này thực sự quan trọng khi bạn cố gắng chứng minh rằng hệ thống của bạn là an toàn chống lại các mối đe dọa cụ thể. Điều này dễ dàng lý luận là đặc biệt quan trọng đối với an toàn thread, kể từ khi các đối tượng bất biến được tự động thread-an toàn.
Hiệu suất đáng ngạc nhiên thường tốt hơn đối với các chuỗi không thay đổi được. Bất cứ khi nào bạn lấy một đoạn của một chuỗi, thời gian chạy Python chỉ đặt một khung nhìn trên chuỗi gốc, do đó không có phân bổ chuỗi mới nào. Vì chuỗi là bất biến, bạn có được ngữ nghĩa sao chép mà không thực sự sao chép, đó là một chiến thắng hiệu suất thực sự.
Eric Lippert giải thích thêm về lý do đằng sau các chuỗi không thay đổi (trong C#, không phải Python) here.
Nguồn
2012-03-09 19:24:39
Tôi đã cố gắng thêm , không biết tại sao nó không hoạt động. –
Nó thực sự phụ thuộc vào những gì bạn đang cố gắng làm và tầm quan trọng của việc tối ưu hóa mã. Tôi nghĩ rằng trong hầu hết các trường hợp, chỉ cần trả về một chuỗi mới được ưa thích hơn là tạo một loại khác hoặc sử dụng một danh sách. – dave
Nếu bạn phải làm điều này thường xuyên, hãy suy nghĩ lại thuật toán của bạn. – delnan