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
==================
在的function()
第一执行,可变data
指“无”对象(ID:1781798096)按代码的第三行,现在data
指空的列表对象(ID :1780266168520)在的function
秒执行,data
预计将有值1780266168520.的ID,但出人意料的是,它给出1781798096这是当data
所指的“无”对象相同的值。
但是,如果我们改变默认的参数有些武断名单,说[0],
[0] 1780266149960
[0] 1780266149960
==================
[0, 1] 1780266149960
[0, 1] 1780266149960
==================
,我们发现,它给了相同的ID值。
所以我的问题是,为什么我们不能修改这在以前被称为“无”对象的变量,为什么发生这样的区别,如果我们设置默认参数设置为“无”,[0]?
你的问题是没有意义的。你在问为什么局部变量不能在函数调用中保留它们的值? – melpomene
@melpomene如果您将默认参数更改为某个任意列表,您将发现id值完全相同。为什么在将默认参数设置为“无”时出现这种差异? – Jin
我不明白你在说什么。 – melpomene