当前位置: 首页 > 后端技术 > Python

在python中,函数参数的传递是传值还是传引用?

时间:2023-03-26 15:46:49 Python

要理解上面的问题,你需要明白Python中的一切都是对象。因此,函数在传递参数的过程中,传递的是对象的所有引用,引用指向内存中的地址(id()看的是当前变量的地址值)。那么上面的问题本身并不是特别严谨,那为什么还会有上面的问题呢?我猜面试想问的是:在python中,当函数参数是基本数据类型时,是按值传递还是按引用传递?这是因为在实际使用中,不同的数据类型表现出不同的现象,但本质上都是传递对象的引用。在实际使用中,由于不可变数据类型不能改变其内存中的值,因此看似不可变数据类型被复制传递,但实际上它只是两个不同的变量指向同一块内存中的地址。可变数据类型,因为它在内存中的值是可以改变的,所以在函数内部改变可变数据类型的值会影响函数外的变量,因为这两个参数指向同一个内存块地址。题外话:在python中,整数(int)值为0-256时,为共享内存(python3.6windows7|python3.5ubuntu18.4以上环境测试,256后地址不再共享,其他机器不知道是不是这样),这样做有什么用?我的理解是:对于常用的整型数据,可以节省内存开销。l=[1,2,3]t=(1,2,3)b=2print('id(l):{}'.format(id(l)))print('id(l[1]):{}'.format(id(l[1])))print('id(t[1]):{}'.format(id(t[1])))print('id(b):{}'.format(id(b)))print('------------')defaaa():l=[1,2,3]t=(1,2,3)b=2print('id(l):{}'.format(id(l)))print('id(l[1]):{}'.format(id(l[1])))print('id(t[1]):{}'.format(id(t[1])))print('id(b):{}'.format(id(b)))aaa()第一次写博客,如有不妥之处,请多多指教!