了解python的内存模型

Sup*_*amp 2 python memory

请考虑以下日志:

>>> y = 20000
>>> id(y)
36638928
>>> y = 1000000
>>> id(y)
36639264

正如您所看到的,在更改值之后y,它的ID也会更改.
这是否意味着int不可改变?幕后发生了什么?

谢谢!

iCo*_*dez 5

是的,整数是不可变的.你需要意识到的是:

  1. 变量只是用于引用对象的名称.

  2. 20000并且1000000是两个唯一的整数对象.这意味着它们永远不会同时共享相同的内存地址.

简单来说,当您执行此行时:

y = 20000
Run Code Online (Sandbox Code Playgroud)

发生了两件事:

  1. 20000在对象空间中创建整数对象.

  2. 一个名字y在命名空间中创建并指出该对象.

当你执行这个时:

y = 1000000
Run Code Online (Sandbox Code Playgroud)

还有两件事情发生了:

  1. 1000000在对象空间中创建一个新的整数对象.

  2. 名称y将更改为指向该对象而不是20000.

  • @cmd:这是一种实现细节,`int`偶尔会被实习,但是它们被实习的环境并不是语言的一部分; 例如; 在我的机器上(cpython 2.7.6)`1000是1000`但是'1000不是(999 + 1)` (4认同)