Мы с друзьями обсуждали вопросы, связанные с управлением памятью в 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)]
) показывает разные адреса для каждого словаря.
id()
документацию по функциям? Вы пропустили что-то важное там. - person Martijn Pieters   schedule 10.03.2015id()
повторным использованием одного и того же номера. Меня удивило лицо, потому что оно повторно использовало один и тот же номер, хотя я сохранил ссылку на него (что было моей ошибкой). - person sitaktif   schedule 10.03.2015{}
объекты, которые вы создаете; генератор производит их, но не ссылается на них впоследствии. - person Martijn Pieters   schedule 10.03.2015