永发信息网

python 函数为什么不能通过传参修改列表

答案:3  悬赏:20  手机版
解决时间 2021-01-30 07:20
  • 提问者网友:两耳就是菩提
  • 2021-01-30 00:16
python 菜鸟提问:列表是可变元素。为什么函数不能通过传参的方式修改列表的值呢:
eg:
def change_list(a):
a = [2, 3, 4]

a = [1, 2]
change_list(a)

为什么a的结果仍然是[1, 2]呢?不是穿对象的引用吗?不是可变元素吗?
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-01-30 01:43
解释:
1、你首先定义了一个函数change_list;
2、然后创建了列表对象[1,2],a 是这个列表对象的引用;
3、调用函数change_list,传递引用a,执行函数:注意函数内部定义的a在函数自己的scope,和你传的a没有任何关系,换句话说,函数内部定义的a是个完全新的列表对象,函数执行完成后,你打印a,当然还是之前定义的[1,2]


你想要修改函数外部的变量,即全局变量,需要使用global声明,即:

1
2
3
4
5
6
7
defchange_list():
    globala
    a =[2, 3, 4]
    
a =[1, 2]
change_list()
printa
全部回答
  • 1楼网友:封刀令
  • 2021-01-30 03:21
>>> def change_list(a): a = [2,3,4] >>> a= [1,2] >>> change_list(a) >>> a [1, 2] 但是这个可以 >>> def change_list(a): a .append(3) >>> a= [1,2] >>> change_list(a) >>> a [1, 2, 3]
  • 2楼网友:想偏头吻你
  • 2021-01-30 02:53
python中所有数据都是对象,所以传参也是传的对象的引用,这个引用在函数执行前和执行后是不会被改变的,如: num = 1 def change(num): print(id(num)) num = 2 print(id(num)) 执行change(num)后num的值还是1 可以看到在执行前num的id值(可以理解为内存地址)是某一值 但在执行change后,num的id值改变了,也就是说内部的num指向了另外的对象,而外部的num却还是指向原来的对象,所以值没有变; 同理,如: num_list = [1,2] def change_list(num_list): print(id(num_list)) num_list.append(3) print(id(num_list)) 可以看到执行change_list后num_list的id值没有改变,也就是说num_list是在原来的对象上添加了新的数据,外部的num_list也是指向这一对象,所以外部的num_list数据也添加了新的数据。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯