前提・実現したいこと
Python3の勉強中で、仕様について納得のいかない点がありましたので、質問させていただきます。
二つの関数内でそれぞれ適当なリストの変数を定義し、idを取得すると、二つの関数で別々で定義しているにも関わらず、idが一致します。
変数名も、値も異なるにも関わらずidが一致する理由がわからないのですが、
何か意味のある仕様なのでしょうか?
もしくは、何か根本的な事項を見落としているのでしょうか?
ご教授願います。
該当のソースコード
Python
1def test3(): 2 c_list = [3] 3 return id(c_list) 4 5def test4(): 6 d_list = [4] 7 return id(d_list) 8 9print(test3() == test4())
実行結果
True
試したこと、質問した背景
関数のデフォルト引数について勉強をしている際に疑問を持ちました。
下記のコードを実行した際、test2(True)とtest2(False)の実行結果が一致するかどうか調べていました。
(結果はFlaseでした。解釈としては、「test2(True)は関数内で定義されたローカル変数が返ってくる。一方で、test2(False)は関数呼び出しの際に一度だけ定義されるデフォルトの変数がかえってくる。」からと考えています。)
Python
1def test1(a_boolean): 2 if a_boolean == True: 3 a_list = [1] 4 return id(a_list) 5 else: 6 return id(a_list) 7 8def test2(b_boolean,b_list=[]): 9 if b_boolean == True: 10 b_list = [2] 11 return id(b_list) 12 else: 13 return id(b_list) 14print(test1(True) == test2(True)) 15print(test2(True) == test2(False))
True False
補足情報(FW/ツールのバージョンなど)
OS:Windows10
OSバージョン:1909
OSビルド:18363.778
Ubuntu: 18.04.2 LTS (Bionic Beaver)
Python: 3.7.6
PythonはUbuntuに入れたMinicondaからインストールしました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/03 11:58
2020/05/03 12:17
2020/05/03 15:17