为什么说str和None是不可变变量?

请各位大佬解惑

阅读 3.2k
2 个回答

首先更正:str 是类(或者你叫类型也行),而 None 是 NoneType 类的对象

简而言之,不可变就是你不能去修改它的值。那 None 自不用说,他是 NoneType 类的对象,并且无法修改它的值;对于 str 类的对象,str 类没有提供任何方法去修改一个对象的值,那些会修改值的方法都是新生成了一个 str 对象。

所以,这些对象都是不可变的。


下面是官方文档的描述:

An object with a fixed value. Immutable objects include numbers, strings and tuples. Such an object cannot be altered. A new object has to be created if a different value has to be stored. They play an important role in places where a constant hash value is needed, for example as a key in a dictionary.

一楼说的对, 不过我补充一下, 当你修改一个字符串, 简单地说, python虚拟机会有两个动作: (1).创建一个新字符串(就是你需要的那个, 在原字符串基础上修改的那个), (2).接着把你新字符串的引用(相当于C语言的指针)传递给字符串变量, 我也不知道我表达清楚了吗, 你可以参考《python源码剖析》这本书

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题