当python值改变时,python中的不可变对象会发生什么?

Sha*_*non 5 python object immutability

python中的不可变对象是否意味着它的值在受孕后无法更改?如果是这种情况,当我们试图改变其价值时会发生什么.

让我试着通过一个例子来解释我的怀疑.

例如,我S用值初始化了一个String对象"Hello World".

S = 'Hello World'
Run Code Online (Sandbox Code Playgroud)

然后我输入了这行,

S = 'Hello Human'
Run Code Online (Sandbox Code Playgroud)

所以,当我问翻译时,它告诉我S的价值"Hello Human".显然,现在'S'有一个新的价值.

价值是如何变化的?python是否销毁了旧的字符串对象并使用新值创建了一个新的字符串对象?或者它只是改变了旧对象的值.这与字符串对象是不可变的这一事实有什么关系吗?如果是这样,那么可变对象如何表现?

Nic*_*ood 8

Python停止S指向旧的字符串对象并使其指向新的字符串对象

>>> S="Hello World"
>>> id(S)
32386960
>>> S="Hello Human"
>>> id(S)
32387008
>>> 
Run Code Online (Sandbox Code Playgroud)

你不能改变不可变对象,所以即使你认为你很可能(例如与+=操作员),你也不是

>>> S="Hello"
>>> id(S)
32386912
>>> S+=" World"
>>> id(S)
32386960
>>> 
Run Code Online (Sandbox Code Playgroud)