Mặc dù câu hỏi này không có bất kỳ công dụng thực sự nào trong thực tế, nhưng tôi vẫn tò mò về cách Python thực hiện việc xen chuỗi. Tôi đã nhận thấy những điều sau đây.
>>> "string" is "string"
True
Đây là như tôi mong đợi.
Bạn cũng có thể làm điều này.
>>> "strin"+"g" is "string"
True
Và điều đó khá thông minh!
Nhưng bạn không thể làm điều này.
>>> s1 = "strin"
>>> s2 = "string"
>>> s1+"g" is s2
False
Tại sao Python không đánh giá s1+"g"
và nhận ra nó giống s2
và trỏ nó đến cùng một địa chỉ? Điều gì đang thực sự diễn ra trong khối cuối cùng đó để nó quay trở lại False
?
"string1" + "s2"
,10 + 3*20
vv) tại thời gian biên dịch, nhưng giới hạn kết quả chuỗi chỉ 20 yếu tố (để ngăn chặn[None] * 10**1000
từ quá mở rộng bytecode của bạn). Chính sự tối ưu hóa này đã thu gọn"strin" + "g"
thành"string"
; kết quả là ngắn hơn 20 ký tự.