mimo
Интерпретатор в первом случае создал два объекта, а во втором один? Почему?
В первом случае строка “many paths” достаточно длинная и не кэшируется, т.е. создаются два объекта. Во втором случае короткая строка “manypaths” кэшируется, и создается один объект. Поскольку строки являются неизменяемыми объектами, несколько ссылок могут безопасно ссылаться на этот один объект, что и подтверждает проверка a is b == True.
mimo
Почему sys.getrefcount(“manypaths”) отдает 4?
Думаю, это потому, что в результат, возвращаемый при вызове функции sys.getrefcount(“manypaths”), входят также временно созданные ссылки на аргумент самой функции. То есть, были созданы дополнительные ссылки на строку “manypaths”, когда она была передана в функцию sys.getrefcount().