python中的内存分配

时间:2015-08-24 05:59:39

标签: python-3.x dynamic-memory-allocation

如何在Python中进行内存分配?

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

这里,id(a)等于id(b)。当我增加b id(b)值的变化时。有人愿意对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

这个问题有一些误解,所以我只是给你一些事实并希望它有所帮助:

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

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

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

  4.   

    返回对象的“标识”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。

    这就是全部 - 仅此而已。这里有多种优化方法,所以我不希望id()有任何合理的行为。

答案 1 :(得分:0)

这是因为在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