5

如果在python中多次调用同一个对象,当我打印'self'时,内存位置是否总是相同的?

4

3 回答 3

5

AFAIK,Cpython 中的内存地址是 - 按照设计 - 静态的。可以用 来查看对象的内存地址id()。函数的名称说明了它不会改变的事实......

但是请参阅下面的评论,其中其他 SO 用户指出,id()作为内存地址是 Cpython 的详细实现。

于 2012-05-29T08:37:59.463 回答
4

请注意,作为一种非常高级的语言,Python 没有为对象定义“内存地址”。然而,对象确实具有可以使用内置id()函数查询的“身份” 。这个身份保证在对象的生命周期内不会改变:

返回对象的“身份”。这是一个整数(或长整数),保证该对象在其生命周期内是唯一且恒定的。具有非重叠生命周期的两个对象可能具有相同的 id() 值。

在 CPython 中,这个标识是底层内存地址,但这只是一个实现细节;它在其他实现中可能会有所不同,甚至可能在 CPython 的未来版本中发生变化(尽管这不太可能)。

于 2012-05-29T08:42:32.383 回答
1

正如mac所注意到的,Cpython 中的内存地址是 - 按照设计 - 静态的

但即使在 Cpython 上,如果您使用一些 c 扩展,您也无法对此进行中继。其中一些可以移动对象并手动驱动垃圾收集器。

而且,如果您使用其他 Python 实现,例如PyPy,您肯定不能保证对象的内存位置总是相同的,而且很可能会移动。

于 2012-05-29T09:02:44.193 回答