了解python的内存模型

时间:2014-01-30 22:27:19

标签: python memory

考虑以下日志:

  

>>> y = 20000
  >>> ID(Y)
  36638928个
  >>> y = 1000000
  >>> ID(Y)
  36639264

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

谢谢!

1 个答案:

答案 0 :(得分:5)

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

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

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

  3. 简单来说,当你执行这一行时:

    y = 20000
    
    发生了两件事:

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

    2. 在命名空间中创建名称y并指向该对象。

    3. 执行此操作时:

      y = 1000000
      

      还会发生两件事:

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

      2. 名称y更改为指向该对象而非20000