Python 中的相同对象问题[重复]

问题描述 投票:0回答:1

我观察到您将获得与下面的示例代码相同的对象(在相同的地址)。我期望每次该函数运行时,我都会得到一个不同的函数。我在网上搜索但没有找到这方面的解释。

任何关于为什么会发生这种情况的澄清/任何关于我如何每次都能获得一个distinct对象的建议将不胜感激。

谢谢!

>>> class A:
...   pass
>>>
>>> def test():
...   print A()
... 
>>> test()
<__main__.A instance at 0x10d2ac320>
>>> test()
<__main__.A instance at 0x10d2ac320>
python python-2.7 oop object
1个回答
4
投票

每次都会得到一个不同的对象。

发生的情况是,第一个不同的对象处于活动状态,被打印,然后被垃圾收集器回收。 然后创建一个新对象,并且它恰好获得与上一个对象相同的内存位置(因此具有相同的 ID)。 这实际上比您想象的要常见得多(由于 CPython 内存分配器的实现),并且 Stackoverflow 问题中时不时会出现此弹出窗口的变体。

请注意,Python 仅保证两个对象在生命周期重叠的情况下永远不会具有相同的 ID。 来自

iddocs

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

生命周期不重叠的两个对象可能具有相同的 id() 值。

要看到您可以获得不同的对象,只需保留对返回的对象的引用即可。 这将防止垃圾收集器回收对象:

a = test() b = test() a is b
    
© www.soinside.com 2019 - 2024. All rights reserved.