見出し画像

書籍「Pythonチュートリアル 第3版 11.6 弱参照」の強弱参照テストプログラム

「Pythonチュートリアル 第3版 11.6 弱参照」を読んで、こんな感じかな〜?と思い、、、強参照テストプログラムと弱参照テストプログラムを書いてみました。。。

なお、、、テストプログラムが的を得ているかどうかは分かりません💦

しかし、ガベージコレクション懐かし〜こんなところで出会えるとは思わなかったあw


弱参照テストプログラム

# 弱参照テストプログラム

import weakref, gc

class C:
   pass

d = weakref.WeakValueDictionary()  # 弱参照

d['D'] = C
print(d['D'])

del C  # 削除
gc.collect()  # ガベージコレクション

d['D']  # 辞書のエントリは捨てられているのでエラーになる


'''
実行結果

<class '__main__.C'>
Traceback (most recent call last):
 File "wr.py", line 16, in <module>
   d['D']  # 辞書のエントリは捨てられているのでエラーになる
 File "/usr/lib/python3.7/weakref.py", line 137, in __getitem__
   o = self.data[key]()
KeyError: 'D'
'''


強参照テストプログラム


# 強参照テストプログラム

import gc

class C:
   pass

d = {}  # 強参照

d['D'] = C
print(d['D'])

del C  # 削除
gc.collect()  # ガベージコレクション

d['D']  # 辞書のエントリは生き残っているのでエラーにならない


'''
実行結果

<class '__main__.C'>
'''



#Pythonチュートリアル第3版
#Pythonチュートリアル
#強参照
#弱参照
#ガベージコレクション
#weakref
#WeakValueDictionary
#Python
#Python3