回答編集履歴

1

追記

2022/09/24 07:54

投稿

TakaiY
TakaiY

スコア12772

test CHANGED
@@ -17,3 +17,27 @@
17
17
  'filename': 'eigo'}
18
18
  }
19
19
  ```
20
+
21
+ ---
22
+ 追記
23
+
24
+ > dictional = { '数学': suugaku,~のsuugakuは全く新しい辞書で関数外で宣言したsuugaku={}とは別の辞書ということになるのでしょうか?
25
+
26
+ 提示のコードでは、dictionalの数学keyに入っている辞書と、関数外で変数suugakuが指している辞書は同じものです。
27
+ ですが、それはその辞書にsuugakuという名前が付いているからではありません。関数の中の変数suugakuが外の変数suugakuと同じ辞書を指しているからです。
28
+
29
+ pythonのスコープ(変数の有効な範囲)では、関数内で、参照のみで出現する変数の場合には関数の外の変数の値を参照できるようになっています。(個人的にはよくない仕様だと思います)。
30
+ なので、質問のコードの場合、dictionalの数学keyに入っている辞書と、関数外で変数suugakuが指している辞書は同じになります。
31
+
32
+ 以下のようになっている場合、違うものを指すことになります。同じ変数名ですが違う変数であり、違う辞書を指しています。(空ですが)
33
+ ```python
34
+ suugaku = {}
35
+ eigo = {}
36
+
37
+ async def main():
38
+ suugaku = {}
39
+ dictional = {
40
+ '数学': suugaku,
41
+ '英語': eigo,
42
+ }
43
+ ```