面试题01

Posted mayugang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题01相关的知识,希望对你有一定的参考价值。

面试题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)
View Code

(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]


以上是关于面试题01的主要内容,如果未能解决你的问题,请参考以下文章

Java进阶之光!2021必看-Java高级面试题总结

经验总结:Java高级工程师面试题-字节跳动,成功跳槽阿里!

LeetCode:118.杨辉三角面试题 17.01. 不用加号的加法

最强解析面试题:替换空格「建议收藏!」

最强解析面试题:替换空格「建议收藏!」

面试题01