永发信息网

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

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

a = [1, 2]
change_list(a)

为什么a的结果仍然是[1, 2]呢?不是穿对象的引用吗?不是可变元素吗?
最佳答案
解释:
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
全部回答
>>> 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]
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数据也添加了新的数据。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
超越电脑地址在什么地方,我要处理点事
si chuan di qu you duo shao kao sheng tian
三星a7100充不进电
赤峰有没有道路划线的施工单位,我单位要划停
我一直做出纳,现在想找一位代过账的会计教教
锦江之星酒店扬州四望亭路店停车场(出入口)地
蓝色达摩怎么吃
关于肺心病的描述,下列不正确的是A.慢性肺心
軄守的意思是什么啊?知道的请说下!
小米传照片到华为m a t e8怎么传
中国封建社会最繁荣昌盛的时代是()
请问珍珠粉多少钱一斤?
泰拉瑞亚召唤职业怎么玩
【用所给词的适当形式填空.1.My pen pal】
老师说孩子不是学跳舞的料
推荐资讯
我家装修包给一个公司,签的合同可是合同过期
经十路14号1号楼2单元401室的英文翻译? 要准
青岛火葬 自带骨灰盒可以吗?
求美国hurco vm1 加工中心 操作系统中文翻译
孩子做任何事遇到难题就躲避怎么引导
中国工商银行北潞园支行地址在哪,我要去那里
为什么从冰箱里拿出的水打开盖子之后就结冰了
玉真的能护身吗?
君辉消防器材地址在什么地方,想过去办事
重庆石柱县多少人口和面
为什么手机搜索网址,第二天发现电脑上也出现
浦发信用卡证件有效期是什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?