python中修改一个不可变对象,内存位置如何变化?

Chi*_*jan 1 python memory-management object cpu-architecture immutability

我们可以通过将修改后的变量的新内存位置与原始定义的变量进行比较来检查对象类型是否可变。

例如 - int()是 Python 中的不可变对象。如果我尝试修改整数类型变量的值,我会注意到内存位置发生了变化[Code and Output below]。有人可以在后台提供一个简短的解释吗?

#initial variable
a = 10
# initial memory location
print(id(a))
#modified variable
a += 1
# new memory location, is it same?
print(id(a))
Run Code Online (Sandbox Code Playgroud)
OUTPUT

93285870446416
93285870446524
Run Code Online (Sandbox Code Playgroud)

Tho*_*ler 6

后台发生了什么?

a = 10
Run Code Online (Sandbox Code Playgroud)
  1. 解释器看到一个表达式并确定结果的类型,即 int
  2. 为 anint保留内存,给出内存地址,将该内存标记为“正在使用”
  3. 操作的结果存储在那个内存地址
  4. -/-(尚不适用)
a += 1
Run Code Online (Sandbox Code Playgroud)
  1. 解释器看到一个表达式并确定结果的类型,即 int
  2. 为anint预留了内存,给了一个新的内存地址,因为旧的还在使用中
  3. 操作的结果存储在那个新的内存地址
  4. 不再有指向旧地址的变量,因此标记为空闲

也许另一个

a += 1
Run Code Online (Sandbox Code Playgroud)
  1. 解释器看到一个表达式并确定结果的类型,即 int
  2. 为 anint保留内存,提供另一个新内存地址,或重用现在释放的内存地址(“旧”地址)
  3. 操作的结果存储在那个新的内存地址
  4. 不再有指向地址的变量,因此标记为空闲

等等