В Java явно объявлены строки, интернированные JVM, так что последующие объявления одной и той же строки приводят к двум указателям к одному экземпляру String, а не к двум отдельным (но идентичным) строкам.Использует ли строки Python?
Например:
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
}
Мой вопрос, делает CPython (или любой другой среды выполнения Python) сделать то же самое для строк? Например, если у меня есть некоторый класс:
class example():
def __init__():
self._inst = 'instance'
И создать 10 экземпляров этого класса, будет каждый из них имеют переменную экземпляра со ссылкой на ту же строку в памяти, или я в конечном итоге с 10 отдельными строками ?
Это называется интернированием, и да, Python делает это в некоторой степени, для более коротких строк, созданных как строковые литералы. См. [Интерпретация строки Python] (http://stackoverflow.com/q/15541404) –
Возможный дубликат [Python '==' vs 'is' Сравнение строк, 'иногда' не удается, почему?] (Http: // stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why) – OptimusCrime
@MartijnPieters - спасибо, но насколько короткими являются «короткие» строки? Является ли это зависимым от времени выполнения, или есть стандарт для этого? – csvan