MST

星途 面试题库

面试题:Python函数内部修改列表的作用域相关注意事项

假设有如下代码: ```python my_list = [1, 2, 3] def modify_list(): local_list = my_list local_list.append(4) return local_list result = modify_list() print(my_list) print(result) ``` 请解释为什么`my_list`和`result`的值是一样的,以及在函数内部修改列表时关于作用域的注意事项。如果在函数内部使用`my_list = my_list + [4]`会有什么不同结果,为什么?
37.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. 为什么my_listresult的值是一样的

    • 在Python中,列表是可变对象。当执行local_list = my_list时,local_listmy_list都指向内存中同一个列表对象。
    • 所以当调用local_list.append(4)时,实际上是对内存中同一个列表对象进行修改。
    • 函数返回的local_listmy_list指向的是同一个列表,因此它们的值是一样的。
  2. 在函数内部修改列表时关于作用域的注意事项

    • 对于可变对象(如列表、字典等),在函数内部如果直接对其进行修改(如使用appendpop、对字典键值对进行修改等操作),会影响到函数外部的对象,因为它们指向同一个内存地址。
    • 但是如果在函数内部重新赋值(如my_list = [1, 2, 3]),那么在函数内部会创建一个新的列表对象,这时候就不会影响到函数外部的my_list
  3. 如果在函数内部使用my_list = my_list + [4]会有什么不同结果,为什么

    • 结果my_list不会被修改,result会包含[1, 2, 3, 4]
    • 原因my_list = my_list + [4]这种操作相当于创建了一个新的列表对象,是对my_list重新赋值。my_list在函数内部指向了一个新的列表[1, 2, 3, 4],而函数外部的my_list还是原来的[1, 2, 3],因为重新赋值操作创建了新的对象,没有修改原来my_list指向的对象。函数返回的result是函数内部重新赋值后的列表,所以与函数外部的my_list不同。