执行期间python对象是否在内存中移动?

时间:2012-05-29 08:35:44

标签: python

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

3 个答案:

答案 0 :(得分:4)

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

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

HTH!

答案 1 :(得分:4)

请注意,使用非常高级的语言,Python不会为对象定义“内存地址”。但是,对象确实具有可以使用built-in id() function查询的“身份”。保证在对象的生命周期内不会改变此身份:

  

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

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

答案 2 :(得分:1)

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

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

如果你正在使用其他Python实现,如 PyPy ,你肯定不能保证对象的内存位置始终是相同的,并且可能会移动很高。