“为什么”python 数据类型是不可变的

Nay*_*iya 3 python memory

为什么(不是如何)像 int 和 string 这样的 Python 原始数据类型是不可变的。那是因为脚本语言的实现限制。

作为例子

a = 5;
a = 6; 
Run Code Online (Sandbox Code Playgroud)

在第二行(a = 6;)而不是创建一个新的内存位置,为什么不能将第一个内存位置更改为 6

orl*_*rlp 5

一些 Python 数据类型是不可变的,因为 Python 使用引用/指针语义。

这意味着,无论何时将表达式分配给变量,实际上并不是将值复制到由该变量表示的内存位置,而只是为该值实际存在的内存位置命名。

现在,如果例如字符串是可变的,就会发生这种情况:

a = "test"
b = a
b[2] = "o"

# Now a would be "tost", oops.
Run Code Online (Sandbox Code Playgroud)

这种行为被认为是不直观的,因此字符串被设置为不可变的。


同样对于整数,如果分配新值会改变原始位置,则会发生以下情况:

a = 5
b = a
b += 5

# a is now 10 :(
Run Code Online (Sandbox Code Playgroud)