、function()
の最初の実行時以前に「なし」と言及していた変数を変更できないのはなぜですか?
def function(data=None):
print(data,id(data))
if data is None:
data=[]
print(data,id(data))
data.append(1)
print("==================")
function()
function()
>> None 1781798096
[] 1780266168520
==================
None 1781798096
[] 1780266174856
==================
、data
変数を「なし」オブジェクト(ID:1781798096)を参照するコードの第三の行では、今data
は、空のリストオブジェクトを参照(ID :1780266168520)function
の2回目の実行時には、data
のid値は1780266168520であると予想されます。しかし、驚くべきことに、data
が「なし」オブジェクトと呼ばれるときは同じ値になる1781798096が出力されます。
しかし、我々はいくつかの任意のリストにデフォルトのパラメータを変更する場合は、[0]と言う、
[0] 1780266149960
[0] 1780266149960
==================
[0, 1] 1780266149960
[0, 1] 1780266149960
==================
我々はそれが同一のID値を与えることを見つけます。
なぜ私は以前に "None"オブジェクトを参照していた変数を変更できないのですか?デフォルトパラメータを "None"と[0]に設定すると、そのような違いが発生するのはなぜですか?
あなたの質問は意味をなさない。なぜ、ローカル変数が関数呼び出しで値を保持しないのか尋ねていますか? – melpomene
@melpomeneデフォルトのパラメータを任意のリストに変更すると、id値がまったく同じであることが分かります。デフォルトのパラメータを "None"に設定すると、そのような違いが生じるのはなぜですか? – Jin
あなたが何を言っているのか分かりません。 – melpomene