Python 使用 list 作为函数参数时,默认参数的内存地址是同一个!
2019-03-26 23:20
169 查看
今天碰到这样一道题:
def f(x, l=[]): for i in range(x): l.append(i*i) print(l) f(2) f(3,[3,2,1]) f(3)
问:输出结果是什么?
我原以为结果应该是:
[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 4]
然而事实并不是这样,正确答案应该是
[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]
惊了!
在给函数加断点运行之后发现f(3)运行过程中 数组l 的初始值并不是空的.
于是修改了下函数:
def f(x,l=[]): for i in range(x): l.append(i*i) print(id(l)) print(l) f(2) f(3,[3,2,1]) f(3)
运行结果如下:
2295315360904 [0, 1] 2295334556488 [3, 2, 1, 0, 1, 4] 2295315360904 [0, 1, 0, 1, 4]
可以发现list默认参数的地址是同一个!
绝了
你好骚啊…
相关文章推荐
- python使用函数作为参数
- Python之在函数中使用列表作为默认参数
- 深入讲解Python函数中参数的使用及默认参数的陷阱
- 深入讲解Python函数中参数的使用及默认参数的陷阱
- Python 函数默认参数不能使用可变对象,如List,dict
- python中使用list作为默认参数且调用时不给其赋值的问题
- python里函数怎么样使用元组或字典作为参数调用
- 函数可变参数va_list、va_start、va_arg、va_end原理及使用方法
- 使用JSON作为函数的参数(转载)
- 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- c++中参数不定函数和va_list的使用
- List<T>的ForEach方法(可以使用“语句lambda”作为其参数),如下例子:
- C语言 编写一个函数,将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数,
- 《IOS_作业C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)
- 使用指针作为函数参数的注意事项
- .NET中,写一个函数找出一个整数数组中,第二大的数(整数数组作为函数参数)
- 如何将二维数组作为参数传给一个函数
- 在COM接口中不要使用同时出现只是大小写不同的名字作为属性名、函数名或者参数名
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- python 当list,dic作为默认参数的正确写法