Python字符串是不可变的?

Nik*_*lar 1 python string immutability python-3.x

Python字符串应该像整数一样是可以改变的.考虑一下:

>>> num1 = 34
>>> num2 = 36
>>> id(num1)
505894832
>>> num4 = 34
>>> id(num4)
505894832
Run Code Online (Sandbox Code Playgroud)

num4与num1具有完全相同的ID,这意味着它们指向相同的东西.字符串不应该发生同样的事情吗?我很困惑:

>>> name = "Sumeet"
>>> id(name)
35692000
>>> name = "Ali"
>>> id(name)
35926912
>>> naam = "Sumeet"
>>> id(naam)
35926848
Run Code Online (Sandbox Code Playgroud)

最后的输出不应该是: 35692000

pca*_*cao 5

几个变量具有相同id的事实与实际对象是不可变的无关.

事实上,由于它们的不变性,这可以安全地发生(节省内存).

让我们假设python中的字符串不是不可变的,你声明:

a = 'abc'

b = 'abc'

如果你改变了a,那就意味着b要么引用一个完全不同的对象(复制表示相同文字字符串所需的内存),要么a改变时,必须复制整个对象才能进行更改(这样b不会受到影响).

由于字符串是不可变的,因此两个变量都可以安全地指向同一个对象.对不可变数据结构的任何更改都会创建一个新结构,并且指向它的引用将更改为新结构,而对"旧"结构的所有其他引用保持不变.不可变数据结构中没有副作用大大减少了由于共享结构/对象在代码中的其他位置发生更改而发生错误的可能性.