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