python - 比较 itertools.product 的 id

标签 python

您如何解释以下代码片段,如果我单独调用 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/

相关文章:

python - 在 Apache2 上为 django 部署配置 mod_wsgi 后出现 404 错误

python - Pygame - 两个 CIRCLES 的碰撞检测

javascript - 在python中填写表单并按下javascript按钮

python - 如何继承 QTableWidget 和我的类 MainWindow?

python - 将 protected 范围添加到现有的 NamedRange

python - 值错误 : Data must be positive (boxcox scipy)

python - 如何完全反汇编 Python 源代码

python - 使用 N 个参数运行 subprocess.popen

Python:index() 有问题吗?

Python 多处理,ValueError : I/O operation on closed file