我正在试图理解可变和不可变对象。我已经阅读了字符串是不可变的,并且对于每个字符串,都会创建一个具有不同对象ID的单独对象。我正在尝试使用下面的简单代码来验证这一点,但是我看到多个不同的字符串具有相同的对象ID。请问有人能够澄清这一点吗?先感谢您。
mystring = ""
mylist = ["This ", "That ", "This ", "That ", "This ", "That ", "This ", "That "]
for item in mylist:
mystring = mystring + item
print("mystring: ", mystring, "ID of mystring: ", id(mystring))
这将导致以下输出:
mystring: This ID of mystring: 6407264
mystring: This That ID of mystring: 42523448
mystring: This That This ID of mystring: 42523448
mystring: This That This That ID of mystring: 6417200
mystring: This That This That This ID of mystring: 42785608
mystring: This That This That This That ID of mystring: 42785608
mystring: This That This That This That This ID of mystring: 42837536
mystring: This That This That This That This That ID of mystring: 42775856
id
未被使用时,它们会被回收,因此如果您丢弃旧字符串,则看到相同的id
并不奇怪。 - AChampionid
返回值和字符串不可变性的保证。 - user2357112mystring
重新绑定的时候,旧的mystring
就不再有引用了。如果保留对旧对象的另一个引用,就无法看到优化效果了! - wimmystring
值会在名称绑定操作之前存在,然后名称绑定将结束旧的mystring
值的生命期。+和=之间将存在生命周期重叠。 - user2357112