如果在python中多次调用同一个对象,打印“self”时内存位置是否总是相同?
答案 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 ,你肯定不能保证对象的内存位置始终是相同的,并且可能会移动很高。