如果我单独在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
答案 0 :(得分:3)
它没有任何区别,但要解释它;-):在你的第二次拼写中,两个产品都是临时对象,在获得id之后立即销毁 。 “立即”是CPython引用计数的结果。因此,在构建第二个产品之前释放用于第一个产品的内存,并且第二个产品可以重复使用相同的内存 。不能保证它会被重用,或者它不会被重用。在你的例子中,碰巧它被重用了。
你的第一个拼写也可以显示这种行为 - 但事实并非如此。
这不深。这很简单; - )
顺便说一句,它可能很可能你会在第一次拼写中获得相同的ID,因为解释器必须在步骤之间为其他东西分配内存;例如,它需要分配内存来显示“41401800”。