python 中的内存分配

memory allocation in python

Python 中的内存分配是如何发生的?

>>> a=1
>>> b=1
>>> id(a)
2011353552
>>> id(b)
2011353552
>>> b+=1
>>> id(b)

这里,id(a) 等于 id(b)。当我增加 b id(b) 的值时会发生变化。任何人都可以对此有所了解吗?

问题中存在一些误解,所以我只提供一些事实,希望对您有所帮助:

  1. 由于数字对象是不可变的,它们可能指向相同的内存。具体来说,来自源的 1 可以(但不一定)始终是同一个对象。

  2. 您并没有真正增加 b 的值以在技术上是正确的。您创建一个表示 2 的新对象(或获取现有对象)并将其分配给 b 变量。现在是新对象了。

  3. id() 用于对象的唯一标识符。它根本不必与内存分配相关。目前它确实如此,因为 cPython 以这种方式使用它。但正如文档所述:

Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime.

仅此而已 - 仅此而已。这里有多项优化,所以我不希望 id() 有任何合理的行为。

这是因为在 python 中一切都是对象,小整数从 -5256 都是单例并且被缓存,这就是为什么 id(a) == id(b) 现在当你这样做的时候b += 1 您将 b 重新分配给 b + 1,这不是递增。如您所见,ab 在第一种情况下指向同一个对象,但随后您重新分配 b 它指向不同的对象。

>>> a = 1
>>> b = 1
>>> a is b
True
>>> b += 1
>>> a is b
False