回答編集履歴
1
ちょっと補足
answer
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
gc: collectable <list 0x10992a408>
|
8
8
|
gc: collectable <dict 0x1097f5508>
|
9
9
|
```
|
10
|
-
<A ...>は`A()`によって作られたAクラスのオブジェクト、<list ...>は`[A()]`によって作られたリスト(list)です。最後の<dict ...>なのですが、`test[0]`であるAクラスのオブジェクトの`__dict__`の実体である辞書(dict)のようです。delの前に`print(hex(id(test[0].__dict__)))`を挿入して、同じオブジェクトIDであることを確認しています。
|
10
|
+
<A ...>は`A()`によって作られたAクラスのオブジェクト、<list ...>は`[A()]`によって作られたリスト(list)です。最後の<dict ...>なのですが、`test[0]`であるAクラスのオブジェクトの`__dict__`の実体である辞書(dict)のようです※。delの前に`print(hex(id(test[0].__dict__)))`を挿入して、同じオブジェクトIDであることを確認しています。
|
11
|
+
※ この辞書には{'test': [<Aのオブジェクト>]}という感じで自己参照したものが保存されています。
|
11
12
|
|
12
13
|
この`__dict__`ですがちょっと面白い動きをするようです。色々試してみると、オブジェクトに任意の名前で代入したとき、つまり`__dict__`に中身があるような状態にしたときのみ、この<dict ...>が回収リストに出てきます。必要にされたときに、初めて自動的に作成される仮想的な辞書のようです。Pythonのソースコードを見ればもう少し詳しくわかるかも知れません。
|