You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python基础数据类型不可变,为何字符串有replace()方法且原对象ID不变?

问题解答

1. 为什么不可变的字符串类型会提供replace()方法?

Python中字符串的replace()方法从未修改原字符串本身,它的执行逻辑是:读取原字符串的内容,按照替换规则生成一份全新的字符串对象作为返回值,原字符串的内容、内存地址全程不会发生任何变化,完全符合不可变数据类型的设计要求。
你之前写的尝试给字面量1=78的操作属于直接修改字面量本身,这和replace()的逻辑完全不同,replace()没有改动原对象的任何数据。

2. 为什么示例代码里两次打印变量s的ID一致?

因为你在示例中没有把replace()的返回值赋值给任何变量,两次打印id(s)取的都是原字符串的内存地址,当然完全相同。你可以修改代码打印replace()返回值的ID,就能看到明显差异:

s = "Jimmy is a student of CS and Jimmy is a boy "
print(id(s)) # 打印原字符串ID
new_s = s.replace("CS","SE")
print(id(new_s)) # 打印replace生成的新字符串ID,和原ID不同
print(id(s)) # 原字符串ID没有变化

运行上述代码后你会发现:new_s的ID和原字符串s的ID完全不同,而原字符串s的ID全程没有变化,这也验证了replace()确实生成了新对象,原对象没有被修改。

内容的提问来源于stack exchange,提问作者Deepak Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:24:02