为了账号安全,请及时绑定邮箱和手机立即绑定

全局/内部变量冲突?(Python)

全局/内部变量冲突?(Python)

湖上湖 2021-03-19 09:15:33
很抱歉这个愚蠢的问题,我是一名新手程序员。但是谁能告诉我为什么下面的程序会以这种方式运行?def lol(a):    a=[]    a.append(1)    return a现在当我做k = [2, 3]lol(k)它返回1,但k仍然不变?为什么?非常感谢!
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

在中lol(a),该行a=[]绑定a到新列表。在此行之后,a不再与绑定到同一列表k。因此,您实际上在函数中修改的是一个新列表,而不是您在参数中收到的列表。有关更多信息,请参阅docs。


如果您想k成为[1],则可以改成这样的形式:


def lol(a):

    a[:] = [1]

    return a


k = [2, 3]

lol(k) # now k is equal to [1]


查看完整回答
反对 回复 2021-03-31
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

检查嵌入式注释。


def lol(a): # a and k are pointing to same memory location

    a=[] # Now, new list is created, pointing to different memory address. 

    a.append(1)

return a # returning new list 


k = [2, 3]  # New list k is created

lol(k)

如果打印k,将得到[2,3]。它根本没有被lol()更改。


查看完整回答
反对 回复 2021-03-31
  • 2 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信