为什么不同的字符串在 Python 中具有相同的 ID?

Fre*_*enk 8 python

据说字符串是不可变的对象,当我们对该变量进行更改时,它实际上会创建一个新的字符串对象。

所以我想用这段代码来测试这个现象:

result_str = ""

print("string 1 (unedited):", id(result_str))

for a in range(1,11):
    result_str = result_str + str(a)
    print(f"string {a+1}:", id(result_str))
Run Code Online (Sandbox Code Playgroud)

我得到了以下 ID:

string 1 (unedited): 2386354993840
string 2: 2386357170336
string 3: 2386357170336
string 4: 2386357170336
string 5: 2386357170336
string 6: 2386357170336
string 7: 2386357170336
string 8: 2386357170336
string 9: 2386360410800
string 10: 2386360410800
string 11: 2386360410800
Run Code Online (Sandbox Code Playgroud)

那么,如果每个字符串彼此不同,那么为什么字符串 2-8 和 9-11 具有相同的 ID?而且,如果以某种方式解释了这个问题,为什么 ID 会在字符串 9 处发生变化?

Bal*_*esh 4

与 create 关联的字符串result_str在下一次分配时达到生命周期结束。因此存在重复 id 的可能性。

\n\n

这是文档

\n\n
\n

返回对象的\xe2\x80\x9cidentity\xe2\x80\x9d。这是一个整数,保证该对象在其生命周期内唯一且恒定。具有不重叠生命周期的两个对象可能具有相同的 id() 值。

\n
\n