鱼C论坛

 找回密码
 立即注册
查看: 1124|回复: 10

[已解决]在菜鸟论坛看到的传可变对象实例,print ("函数外取值: ", mylist)

[复制链接]
发表于 2021-9-6 00:22:11 | 显示全部楼层 |阅读模式

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

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

x
#!/usr/bin/python3
 
# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print ("函数内取值: ", mylist)
   return
 
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)

传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

mylist = [10,20,30],print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?
最佳答案
2021-9-6 10:31:13
def changeme( mylist ):
   arr = mylist[:] # 如果不想影響全局變量,可以在函數裡面定義新列表取代
   arr.append([1,2,3,4])
   print ("函数内取值: ", arr)
   return # 沒有返回值,return 可有可無
 
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-6 00:22:48 | 显示全部楼层
今天见了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 07:02:21 | 显示全部楼层
你都知道这是个全局变量了,原数据为 [10, 20, 30] 在函数changeme()append了 [1, 2, 3, 4] ,这不是改变了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 08:15:21 | 显示全部楼层
mylist.append是在原列表的基础上对自身做出的改变
而非变量上的改变

打个比方
mylist就像是个衣橱
它没有变成桌子凳子
只是在衣橱中增加了一顶帽子
没有改变它依旧是同一个衣橱的本质
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 10:31:13 | 显示全部楼层    本楼为最佳答案   
def changeme( mylist ):
   arr = mylist[:] # 如果不想影響全局變量,可以在函數裡面定義新列表取代
   arr.append([1,2,3,4])
   print ("函数内取值: ", arr)
   return # 沒有返回值,return 可有可無
 
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 21:49:50 | 显示全部楼层
大马强 发表于 2021-9-6 07:02
你都知道这是个全局变量了,原数据为 [10, 20, 30] 在函数changeme()append了 [1, 2, 3, 4] ,这不是改变 ...

忘了全局变量是可以改变的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 23:47:53 | 显示全部楼层
逃兵 发表于 2021-9-6 08:15
mylist.append是在原列表的基础上对自身做出的改变
而非变量上的改变

回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-6 23:48:24 | 显示全部楼层
大马强 发表于 2021-9-6 07:02
你都知道这是个全局变量了,原数据为 [10, 20, 30] 在函数changeme()append了 [1, 2, 3, 4] ,这不是改变 ...

回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?就这理解不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-7 00:00:42 | 显示全部楼层

回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ,全局变量mylist怎么改变了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-7 07:07:12 | 显示全部楼层
Boibot 发表于 2021-9-6 23:48
回看了视频,在函数内部修改全局变量,等于在函数内新建了一个局部变量,print ("函数外取值: ", mylist) ...

列表有特殊性,参考4楼大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-7 08:10:09 | 显示全部楼层
mylist.append是在原列表的基础上对自身做出的改变
而非变量上的改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 10:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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