当我们偶然发现以下行为时,我和一些朋友正在讨论与 Python 中的内存管理相关的事情:
In [46]: l = ({} for _ in range(6))
In [47]: [ id(i) for i in l]
Out[47]:
[4371243648, # A
4371245048, # B
4371243648, # A
4371245048, # B
4371243648, # etc.
4371245048]
令人惊讶的是,我们似乎没有明确定义的行为:dict 每次都不是新的,也不是每次都相同的引用。
最重要的是,我们得到了这种奇怪的行为(没有代码在这两个片段之间的解释器中运行)。
In [48]: m = ({} for _ in range(6))
In [49]: [ id(i) for i in m]
Out[49]:
[4371154376, # C
4371245048, # B (same B as above!)
4371154376, # C
4371245048, # B
4371154376,
4371245048]
谁能解释这种行为?使用列表推导 ( l = [{} for _ in range(6)]
) 显示每个 dict 的不同地址。