老师您好!如图所示,函数参数的默认值是[],为什么调用demo()和demo([])的结果不同?demo()的默认参数不就是[]吗?我觉得两个结果应该一样才对啊
无语_mrkj 发表于2019-03-12 17:23
您可以使用下面的代码测试一下:
def demo(obj=[]):
print(id(obj),obj)
obj.append("1")
调用demo()和demo([])时,obj对应的对象的内存地址是不一样的,所以不是一个对象,也就不能得到一样的结果了。
谢谢老师的回答!我用您给的代码测试过了,的确两个obj对应对象的内存地址是不一样的。但是为什么这两个obj对应的不是一个对象?没有给设置了默认值的函数指定传递的参数不应该就传递默认参数吗obj=[]吗?是不是因为默认参数指向了可变对象,就会使这两个obj对应的不是同一个对象?谢谢老师!
28 三月 2025 | ||||||
---|---|---|---|---|---|---|
5:005:055:105:155:205:255:305:355:405:455:505:55 | ||||||
今日 |
28 三月 2025 | ||||||
---|---|---|---|---|---|---|
0:001:002:003:004:005:006:007:008:009:0010:0011:0012:0013:0014:0015:0016:0017:0018:0019:0020:0021:0022:0023:00 | ||||||
今日 |
三月 2025 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
23 | 24 | 25 | 26 | 27 | 28 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 1 | 2 | 3 | 4 | 5 |
今日 |
2025 | ||||||
---|---|---|---|---|---|---|
一月二月三月四月五月六月七月八月九月十月十一月十二月 | ||||||
今日 |
2020-2029 | ||||||
---|---|---|---|---|---|---|
201920202021202220232024202520262027202820292030 | ||||||
今日 |
28 三月 2025 | ||||||
---|---|---|---|---|---|---|
5:005:055:105:155:205:255:305:355:405:455:505:55 | ||||||
今日 |
28 三月 2025 | ||||||
---|---|---|---|---|---|---|
0:001:002:003:004:005:006:007:008:009:0010:0011:0012:0013:0014:0015:0016:0017:0018:0019:0020:0021:0022:0023:00 | ||||||
今日 |
三月 2025 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
23 | 24 | 25 | 26 | 27 | 28 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 1 | 2 | 3 | 4 | 5 |
今日 |
2025 | ||||||
---|---|---|---|---|---|---|
一月二月三月四月五月六月七月八月九月十月十一月十二月 | ||||||
今日 |
2020-2029 | ||||||
---|---|---|---|---|---|---|
201920202021202220232024202520262027202820292030 | ||||||
今日 |