Trong Java, khai báo rõ ràng các chuỗi được thực thi bởi JVM, để các khai báo tiếp theo của cùng một chuỗi kết quả trong hai con trỏ tới cùng một cá thể String, thay vì hai chuỗi riêng biệt (nhưng giống hệt nhau).Có phải là chuỗi thực tập Python không?
Ví dụ:
public String baz() {
String a = "astring";
return a;
}
public String bar() {
String b = "astring"
return b;
}
public void main() {
String a = baz()
String b = bar()
assert(a == b) // passes
}
Câu hỏi của tôi là, không CPython (hoặc bất kỳ thời gian chạy Python khác) làm điều tương tự cho các chuỗi? Ví dụ, nếu tôi có một số lớp:
class example():
def __init__():
self._inst = 'instance'
Và tạo 10 trường hợp của lớp này, sẽ mỗi người trong số họ có một biến Ví dụ đề cập đến cùng một chuỗi trong bộ nhớ, hoặc tôi sẽ kết thúc với 10 chuỗi riêng biệt ?
Điều này được gọi là thực tập, và có, Python thực hiện việc này để mở rộng, cho các chuỗi ngắn hơn được tạo thành chuỗi ký tự. Xem [Python chuỗi interning] (http://stackoverflow.com/q/15541404) –
có thể trùng lặp của [Python '==' vs 'là' so sánh chuỗi, 'là' không đôi khi, tại sao?] (Http: // stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why) – OptimusCrime
@MartijnPieters - cảm ơn, nhưng chỉ ngắn như thế nào là "ngắn hơn" dây? Thời gian chạy này có phụ thuộc hay không, hoặc có tiêu chuẩn cho nó không? – csvan