如何在Python中进行内存分配?
>>> a=1
>>> b=1
>>> id(a)
2011353552
>>> id(b)
2011353552
>>> b+=1
>>> id(b)
这里,id(a)等于id(b)。当我增加b id(b)值的变化时。有人愿意对此有所了解吗?
答案 0 :(得分:2)
这个问题有一些误解,所以我只是给你一些事实并希望它有所帮助:
由于数字对象是不可变的,因此它们可能指向相同的内存。具体而言,来自源的1
可以(但不必)始终是同一个对象。
您并没有真正增加b
的值,使其在技术上正确。您创建一个表示2
的新对象(或获取现有对象)并将其分配给b
变量。它现在是一个新对象。
id()
用于对象的唯一标识符。它根本不必与内存分配有关。目前它确实如此,因为cPython
以这种方式使用它。但正如文件所述:
返回对象的“标识”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。
这就是全部 - 仅此而已。这里有多种优化方法,所以我不希望id()
有任何合理的行为。
答案 1 :(得分:0)
这是因为在python中,一切都是一个对象,小整数是从-5
到256
的单例,并且被缓存,这就是为什么id(a) == id(b)
现在当你执行b += 1
时将b
重新分配给b + 1
,这不是增量。您可以看到a
和b
在第一种情况下指向同一个对象,但随后您重新分配b
它指向不同的对象。
>>> a = 1
>>> b = 1
>>> a is b
True
>>> b += 1
>>> a is b
False