python 菜鸟提问:列表是可变元素。为什么函数不能通过传参的方式修改列表的值呢:
eg:
def change_list(a):
a = [2, 3, 4]
a = [1, 2]
change_list(a)
为什么a的结果仍然是[1, 2]呢?不是穿对象的引用吗?不是可变元素吗?
python 函数为什么不能通过传参修改列表
答案:3 悬赏:20 手机版
解决时间 2021-01-30 07:20
- 提问者网友:两耳就是菩提
- 2021-01-30 00:16
最佳答案
- 五星知识达人网友:長槍戰八方
- 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、你首先定义了一个函数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数据也添加了新的数据。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯