当快速连续实例化同一类的多个对象时,我们发现它们在 Python 中共享相同的 ID。这种行为可能看起来违反直觉,因为人们可能期望每个对象都有一个唯一的标识符。
在 Python 中,id() 函数返回对象的内存地址。该地址用作对象的 ID,并保证在其生命周期内是唯一的。但是,快速连续创建的对象可能驻留在相邻的内存位置,从而导致相同的 ID。
Python 的 CPython 实现使用引用计数进行垃圾回收。因此,一旦对象的引用计数达到零,就可以立即释放对象。在所讨论的场景中,someClass() 对象均被创建,然后立即被垃圾收集器销毁,因为它们在 print() 调用后不再被引用。
此外,CPython 根据对象的底层指针的值分配 ID。当第一个 someClass() 对象被释放时,它的内存位置可用于重新分配。因此,创建的下一个对象(第二个 someClass() 对象)很可能会被放置在同一位置,继承前一个对象的 ID。
避免共享ID 并维护不同的对象标识符,建议:
通过理解这些实现的细微差别,程序员可以避免依赖相同的 ID使用 Python 进行高效对象管理时的对象 ID。
以上是为什么快速连续创建的多个 Python 对象有时会共享相同的 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!