String являются неизменяемыми.Не существует метода str
, который позволял бы изменять их.
При этом причина, по которой вы видите один и тот же идентификатор несколько раз, заключается в том, что когда объект больше не используется, Python будет повторно использовать свою позицию в памяти,И то, что делает id
, это точно предоставить уникальный идентификатор, возвращая положение объекта в памяти.
Один из способов убедить себя в том, что это действительно причина для вашего наблюдения, состоит в том, чтобы всегдаиметь ссылку на каждую строку, которую вы создаете, добавляя их в list
.
Код
mystring = ""
mylist = ["This ", "That ", "This ", "That ", "This ", "That ", "This ", "That "]
# A list to keep a reference to each string
created_strings = []
for item in mylist:
mystring = mystring + item
# Prevent mystring from being garbage collected by adding it to the list
created_strings.append(mystring)
print("mystring: ", mystring, "ID of mystring: ", id(mystring))
Выход
mystring: This ID of mystring: 2522900655888
mystring: This That ID of mystring: 2522903930416
mystring: This That This ID of mystring: 2522903930544
mystring: This That This That ID of mystring: 2522902118880
mystring: This That This That This ID of mystring: 2522900546624
mystring: This That This That This That ID of mystring: 2522900546864
mystring: This That This That This That This ID of mystring: 2522902428376
mystring: This That This That This That This That ID of mystring: 2522900907952
Обратите внимание, что теперь эта памятьне утилизируется, каждый объект имеет свой id
.