Python 字符串不是不可变的?

标签 python python-2.7

<分区>

直到现在我都相信 Python 字符串是不可变的,但是当我尝试这个时我感到困惑

>>> a
'hello world !'
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a
'hello world !dd'

如果我使用 += 运算符,它不会更改对象 ID,尽管字符串已更改。在这种情况下发生了什么?

现在这有点不同了? https://ideone.com/eg1SIN

有人能解释一下这里发生了什么吗?

最佳答案

id返回一个整数值,该值对于您传递给它的对象是唯一的。如果 a 是对字符串 'hello world !' 的唯一引用,那么执行 a += "b" 可能会结束该字符串的生命周期string 'hello world !' 在创建字符串 'hello world !b' 之前,因此旧字符串的 ID 被重用(这是完全有效的行为)。

添加对字符串 'hello world !' 的另一个引用(例如,通过在修改 a 之前执行 b = a )应该导致发散的 ID。

关于Python 字符串不是不可变的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911533/

相关文章:

python - 如何连接函数的参数以形成字符串?

PYTHONPATH 未在 virtualenvs 中自动设置

python - Pandas 时间序列 : find gaps in sessions, 并用单独的 ID 命名每个 session /间隙

python - docker python simplehhtpserver 不工作

linux - 如何在python程序中使用sdaps setuptex命令

c++ - 如何使用 Boost.Python 从 C++ 对象创建 Python 对象

python - 从一个枚举状态移动到下一个并循环

Python imaplib 下载 Gmail Text 而不下载完整附件

python - python中的立体声到单声道插值

Python 2.7.5 在 Ubuntu 上安装,MAXREPEAT