理解python';s记忆模型

理解python';s记忆模型,python,memory,Python,Memory,考虑以下日志: >>>y=20000 >>>id(y) 36638928 >>>y=1000000 >>>id(y) 36639264 如您所见,更改y的值后,其id也会更改。 这是否意味着int是不可变的?幕后发生了什么 谢谢 是的,整数是不可变的。您需要了解的是: 变量只是用来引用对象的名称 20000和1000000是两个唯一的整数对象。这意味着它们永远不会同时共享同一个内存地址 简单地说,当您执行这一行时: y = 20000 发生了两件事: 在对象空间中创建一个整数对象20000 名

考虑以下日志:

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

如您所见,更改
y
的值后,其id也会更改。
这是否意味着
int
是不可变的?幕后发生了什么


谢谢

是的,整数是不可变的。您需要了解的是:

  • 变量只是用来引用对象的名称

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

  • 简单地说,当您执行这一行时:

    y = 20000
    
    发生了两件事:

  • 在对象空间中创建一个整数对象
    20000

  • 名称
    y
    在名称空间中创建并指向该对象

  • 执行此命令时:

    y = 1000000
    
    还有两件事发生:

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

  • 名称
    y
    更改为指向该对象,而不是
    20000


  • 是的,它是不可变的,只是影响了名为
    y
    的新变量。您可以在网上搜索这些内容,网上已经有很多资源。您没有更改存储在
    y
    中的值,而是为
    y
    指定了一个新值。这将改变
    id
    ,即使该值是可变的。我建议阅读(真的,对每一个python程序员来说)。这与
    int
    是不可变的这一事实无关。在作业的右边是不同的物体,这才是重要的。我看到了你在那里做的事情!这听起来像是
    x=10
    y=10
    然后
    id(x)!=id(y)
    这不是真的,每个整数只出现一次,x和y都引用它。@cmd:这是一种实现细节,
    int
    偶尔会被拘留,但拘留的环境不是语言的定义部分;例如在我的机器上(cpython 2.7.6)
    1000是1000
    1000不是(999+1)
    要学究的话,20000和100000可能在不同的时间出现在内存中的同一个位置,如果最先出现的那一个不再被引用并被释放。它不是“作为值给定整数对象”-正确的短语是“名称
    y
    在名称空间中创建,并指向在对象空间中创建的对象
    20000
    ”,因为这实际上是正在发生的事情,在Python中是一个独特的区别。变量不是“保存东西的框”(这就是为什么在Python中它们被称为名称而不是变量)。