Python中的可变字符串?

Python中的可变字符串?,python,Python,我知道字符串在Python中是不可变的。然而,下面的实验让我困惑 首先,我们使用str()函数创建一个字符串,并将其传递给其他对象(在本例中为dictionary): 然后我们检查它的ID: >>> id(b) 111447696 然后我们“修改”字符串: >>> b = b + ' f' >>> b '{1: 100, 2: 200} f' 然后我们检查“修改”字符串的ID: 我希望b的ID在修改前后会有所不同,因为字符串是不可变的,所

我知道字符串在Python中是不可变的。然而,下面的实验让我困惑

首先,我们使用str()函数创建一个字符串,并将其传递给其他对象(在本例中为dictionary):

然后我们检查它的ID:

>>> id(b)
111447696
然后我们“修改”字符串:

>>> b = b + ' f'
>>> b
'{1: 100, 2: 200} f'
然后我们检查“修改”字符串的ID:


我希望
b
的ID在修改前后会有所不同,因为字符串是不可变的,所以将
'f'
添加到字符串将生成另一个ID不同的字符串,表示内存中的不同位置。为什么两个不同的字符串具有相同的ID?

您能指出您的Python版本和平台吗?在Windows中的CPython 3.6.7中,我不会这样做;DR:不要把对象的
id
看得太重。这并不意味着什么。这是一个内部细节,并没有真正告诉你任何有用的东西。在这种情况下,内存位置被重用是因为…原因。为什么不能重复使用?旧的绳子不再需要了。询问垃圾收集器,因为它们的生命周期是不重叠的,第一个生命周期是被垃圾收集的。字符串不变性的更真实测试是
A='foo'
,然后是
A[1]='x'
>>> b = b + ' f'
>>> b
'{1: 100, 2: 200} f'
>>> id(b)
111447696