Trên số page này, tôi thấy điều gì đó thú vị:Việc sử dụng chuỗi như là chìa khóa trong dict có luôn nhanh hơn không?
Lưu ý rằng có một đường dẫn nhanh cho các lệnh (thực tế) chỉ xử lý các khóa str; điều này không ảnh hưởng đến độ phức tạp của thuật toán, nhưng nó có thể ảnh hưởng đáng kể đến các yếu tố không đổi: nhanh như thế nào một chương trình điển hình kết thúc.
Vậy điều đó có nghĩa là gì?
Điều đó có nghĩa là sử dụng chuỗi làm khóa luôn luôn nhanh hơn?
Nếu có, tại sao?
Cập nhật:
Cảm ơn những lời đề nghị về tối ưu hóa! Nhưng tôi thực sự quan tâm hơn đến sự thật đơn giản, hơn là liệu chúng ta có nên tối ưu hóa hay không.
Cập nhật 2:
Cảm ơn câu trả lời tuyệt vời, tôi sẽ trích dẫn nội dung từ link cung cấp bởi @DaveWebb đây:
" ...
ma_lookup ban đầu được đặt thành hàm lookdict_string (được đổi tên thành lookdict_unicode trong 3.0), dưới dạng cho rằng cả hai khóa trong từ điển và khóa được tìm kiếm đều là chuẩn PyStringObject. Sau đó, nó có thể thực hiện một vài phép tối ưu hóa, chẳng hạn như giảm thiểu các kiểm tra lỗi khác nhau, vì so sánh chuỗi-to-chuỗi không bao giờ làm tăng ngoại lệ. Cũng không cần so sánh đối tượng phong phú, có nghĩa là chúng ta tránh gọi PyObject_RichCompareBool và luôn sử dụng trực tiếp _PyString_Eq.
... "
Ngoài ra, đối với số thí nghiệm, tôi nghĩ rằng kích thước của phần chênh lệch sẽ còn lớn hơn nếu không có int-to-string chuyển đổi
Tôi đoán đây là phương pháp '__hash__' của một đối tượng chính. Tôi đoán rằng nó là khá đơn giản để băm một chuỗi, nhưng tôi sẽ rất quan tâm đến những gì tỷ lệ tra cứu từ điển được chi tiêu băm. – Wilduck
Bản cập nhật của bạn không thay đổi bất cứ điều gì. Không, nó sẽ không nhanh hơn trong hầu hết các trường hợp trừ khi khóa của bạn là dây ở nơi đầu tiên. –
@Lattyware trang được liên kết dường như ngụ ý tăng tốc độ * đối với mỗi lần tra cứu * không chỉ để xây dựng. – Wilduck