面试题答案
一键面试-
为什么
my_list
和result
的值是一样的:- 在Python中,列表是可变对象。当执行
local_list = my_list
时,local_list
和my_list
都指向内存中同一个列表对象。 - 所以当调用
local_list.append(4)
时,实际上是对内存中同一个列表对象进行修改。 - 函数返回的
local_list
和my_list
指向的是同一个列表,因此它们的值是一样的。
- 在Python中,列表是可变对象。当执行
-
在函数内部修改列表时关于作用域的注意事项:
- 对于可变对象(如列表、字典等),在函数内部如果直接对其进行修改(如使用
append
、pop
、对字典键值对进行修改等操作),会影响到函数外部的对象,因为它们指向同一个内存地址。 - 但是如果在函数内部重新赋值(如
my_list = [1, 2, 3]
),那么在函数内部会创建一个新的列表对象,这时候就不会影响到函数外部的my_list
。
- 对于可变对象(如列表、字典等),在函数内部如果直接对其进行修改(如使用
-
如果在函数内部使用
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
不同。
- 结果: