创建一个 class 的实例 N 次而不将其分配给变量

Create an instance of a class N times without assigning it to a variable

CPython 3.8

class Class: pass

s = set(
    id(Class())
    for _ in range(5)
)
len(s) == 1  # True

这似乎是一种解释器魔法,肯定与垃圾收集有关。它是特定于 CPython 的,不受任何标准行为的保证吗?

给定两个不同的对象 xy(即,x is y 为假),只有 x 的生命周期才能保证 id(x) != id(y)y 重叠。如果它们不重叠(如此处的情况),则 id(x) == id(y)id(x) != id(y) 都不需要为真。一个或另一个是,基于实施,但没有一个或多或少比另一个更“正确”。