Python 比较itertools.product的id

Python 比较itertools.product的id,python,Python,如果我分别调用product上的id得到不同的结果,但是如果我将它们相互比较,ids是相等的,您如何解释下面的代码段 >>> from itertools import product >>> id(product("01")) 41401800 >>> id(product(["0", "1"])) 41402080 >>> id(product("01")) == id(product(["0", "1"])) True

如果我分别调用
product
上的
id
得到不同的结果,但是如果我将它们相互比较,
id
s是相等的,您如何解释下面的代码段

>>> from itertools import product
>>> id(product("01"))
41401800
>>> id(product(["0", "1"]))
41402080
>>> id(product("01")) == id(product(["0", "1"]))
True

这没什么区别,只是解释一下;-):在第二种拼写中,这两种产品都是临时对象,在获得其id后立即销毁。“立即”是CPython参考计数的结果。因此,用于第一个产品的内存在构建第二个产品之前被释放,而同样的内存可能会被第二个产品重用。不能保证它会被重用,也不能保证它不会被重用。在您的示例中,它恰好被重用

您的第一个拼写也可能显示这种行为,但碰巧没有

这不深。这很琐碎;-)

顺便说一句,你不太可能在第一次拼写中得到相同的ID,因为解释器必须在两个步骤之间为其他内容分配内存;例如,它需要分配内存来显示“41401800”