鱼C论坛

 找回密码
 立即注册
查看: 2392|回复: 3

列表为什么在函数中可以改变

[复制链接]
发表于 2016-6-7 11:32:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lengyudu 于 2016-6-7 13:48 编辑

如题,全部变量不应该再函数内改变内容,但是在函数外定义的列表为什么可以通过函数改变内容.

举例:
list1 = [1,2,3]
def fun1(list1):
        list1.append(4)

fun1(list1)
list1就变成[1,2,3,4]


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-6-7 13:41:21 | 显示全部楼层
因为列表和字典都是可变类型,所以当定义了一个列表,那么就可以全局对其进行修改,该类型的变量的寿命是全局性的。
而数字,字符串和元组是不可变类型,所以当每次修改一个已存在的变量的时候,Python就会重新声明一个同样的变量,而将已有变量标签进行覆盖,你可以使用id()进行查看俩者的地址,会发现不同。
而如果在函数中进行声明同样变量,该变量的寿命只在该函数中,当函数执行完毕,就会被释放,而不会被保存!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-7 16:34:35 | 显示全部楼层
WylLy 发表于 2016-6-7 13:41
因为列表和字典都是可变类型,所以当定义了一个列表,那么就可以全局对其进行修改,该类型的变量的寿命是全 ...

可不可以举个例子..............
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-7 17:03:09 | 显示全部楼层
仙人掌的花go 发表于 2016-6-7 16:34
可不可以举个例子..............

额,这个其实自己在代码中写一下就可以理解了
我就简单写一个例子吧

代码是:
  1. def test():
  2.         lt[0] = 1
  3.         b = 1
  4.         print('在test函数内lt打印出来:',lt)
  5.         print('函数test中的lt的地址是: %d\nb的值为: %d 地址是:%d' % (id(lt), b, id(b)))

  6. lt = ['a', 2]
  7. b = 3
  8. test()
  9. print('\n\n')
  10. print('函数test外lt打印出来:', lt)
  11. print('函数test外lt的地址是:%d\nb的值为: %d 地址是:%d' %(id(lt), b, id(b)))
复制代码


运行结果是:
  1. 在test函数内lt打印出来: [1, 2]
  2. 函数test中的lt的地址是: 46321160
  3. b的值为: 1 地址是:1725745232


  4. 函数test外lt打印出来: [1, 2]
  5. 函数test外lt的地址是:46321160
  6. b的值为: 3 地址是:1725745296
复制代码

评分

参与人数 1荣誉 +1 收起 理由
仙人掌的花go + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-21 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表