您如何解释以下代码片段,如果我单独调用 product
上的 id
,但 id
相同,则会得到不同的结果如果我将它们相互比较?
>>> 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”。
关于python - 比较 itertools.product 的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20602077/