比较itertools.product的id

时间:2013-12-16 01:23:37

标签: python

如果我单独在id上调用product,如果我将id相等,如果我将它们相互比较,你如何解释下面的代码片段?< / p>

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

1 个答案:

答案 0 :(得分:3)

它没有任何区别,但要解释它;-):在你的第二次拼写中,两个产品都是临时对象,在获得id之后立即销毁 。 “立即”是CPython引用计数的结果。因此,在构建第二个产品之前释放用于第一个产品的内存,并且第二个产品可以重复使用相同的内存 。不能保证它会被重用,或者它不会被重用。在你的例子中,碰巧它被重用了。

你的第一个拼写也可以显示这种行为 - 但事实并非如此。

这不深。这很简单; - )

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