面试题答案
一键面试x
的值为什么没有被修改:- 在Python中,整数是不可变对象。当
x
作为参数传递给func
函数时,传递的是x
的值(即10)的副本,而不是x
本身。函数内部对参数y
进行操作,y = y + 5
实际上是在函数内部创建了一个新的对象(值为15),这个操作并不会影响到函数外部的x
。
- 在Python中,整数是不可变对象。当
- Python函数对不可变对象参数传递的特点:
- 对于不可变对象(如整数、字符串、元组等),函数参数传递是值传递。即函数接收的是对象值的副本,而不是对象本身的引用。在函数内部对参数的修改不会影响到函数外部的原始对象。
- 函数内部作用域和外部作用域在这个过程中的交互情况:
- 外部作用域中定义了变量
x
并赋值为10。 - 当调用
func(x)
时,将x
的值传递给函数内部的y
,此时y
在函数内部作用域。函数内部作用域对y
进行操作,改变的是y
指向的对象(创建新对象15),但这并不影响外部作用域的x
。函数内部作用域独立于外部作用域,对函数内部变量的修改不会自动传播到外部作用域,除非使用global
关键字(但在此例中未涉及)。函数返回的result
是在函数内部作用域计算得到的值,它和外部作用域的x
没有直接的引用关联,只是通过函数调用传递值的方式建立了联系。
- 外部作用域中定义了变量