Как говорится в официальной документации к версии языка 2.7:
https://docs.python.org/2/library/functions.html?h...два объекта с непересекающимся временем жизни могут иметь одинаковый id
agluhov@forge:~$ python
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = 'test_string'
>>> id(s[1:5]) == id(s[2:6])
True
>>> id(s[1:5])
139620785926528
>>> id(s[2:6])
139620785926528
>>> print(id(s[1:5]))
139620785926384
>>> print(id(s[2:6]))
139620785926576
>>> print(id(s[1:5]), id(s[2:6]))
(139620785926528, 139620785926528)
Это просто идентификатор, который является уникальным для каждого объекта в памяти на момент времени. Логично предположить, что интерпретатор отдает тот же буфер под слайс после того, как первый вызов функции отработал.