今日、Python が式{}
をキャッシュし、変数に割り当てられたときに新しい空の dict に置き換えることを学びました。
print id({})
# 40357936
print id({})
# 40357936
x = {}
print id(x)
# 40357936
print id({})
# 40356432
ソースコードは見ていませんが、これがどのように実装されるかについての考えはあります。(おそらく、グローバルへの参照カウント{}
がインクリメントされると、グローバル{}
が置き換えられます。)
しかし、このビットを考慮してください:
def f(x):
x['a'] = 1
print(id(x), x)
print(id(x))
# 34076544
f({})
# (34076544, {'a': 1})
print(id({}), {})
# (34076544, {})
print(id({}))
# 34076544
f
グローバル dict を置き換えずに変更し、変更された dict を出力します。しかしf
、id が同じであるにもかかわらず、グローバル dict は空になりました!
何が起こっている??