面试题1:下面代码的输出结果是什么,请解释。
def extend_list(val, list=[]): list.append(val) return list list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list(‘a‘) print(list1) print(list2) print(list3)
输出结果:
[10, ‘a‘]
[123]
[10, ‘a‘]
解释:
(1)通过 print(id(list1))查询每个list1、list2、list3共3个对象的地址可以比对结果,其中list1和list3指向了同一内存地址,所以最后list1和list3的结果一致。
(2)代码呈现如下:
def extend_list(val, list=[]): list.append(val) return list list1 = extend_list(10) print(id(list1)) # 查看内存地址 list2 = extend_list(123, []) print(id(list2)) # 查看内存地址 list3 = extend_list(‘a‘) print(id(list3)) # 查看内存地址 print(list1) print(list2) print(list3)
(3)结果如下:
(4)更加深入原因如下:
- 函数 extend_list有个默认参数list=[],默认为空,所以extend_list(10)时默认增加一个列表l1,并且将10增加至列表l1中,此时l1=[10]
- extend_list(123,[]),相当于新增一个列表l2,并且将123追加至l2中,此时l2=[123].
- extend_list(‘a‘),相当于在列表l1中追加元素‘a’,此时l1=[10,‘a‘]
- 所以最后的打印结果是list1和list3的结果是[10,‘a‘],列表l2的结果是[123]
原文地址:https://www.cnblogs.com/mayugang/p/10342275.html
时间: 2024-10-26 22:11:58