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

很抱歉这个愚蠢的问题,我是一名新手程序员。但是谁能告诉我为什么下面的程序会以这种方式运行?


def lol(a):

    a=[]

    a.append(1)

    return a

现在当我做


k = [2, 3]

lol(k)

它返回1,但k仍然不变?为什么?


非常感谢!


湖上湖
浏览 163回答 2
2回答

沧海一幻觉

在中lol(a),该行a=[]绑定a到新列表。在此行之后,a不再与绑定到同一列表k。因此,您实际上在函数中修改的是一个新列表,而不是您在参数中收到的列表。有关更多信息,请参阅docs。如果您想k成为[1],则可以改成这样的形式:def lol(a):    a[:] = [1]    return ak = [2, 3]lol(k) # now k is equal to [1]

慕无忌1623718

检查嵌入式注释。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 createdlol(k)如果打印k,将得到[2,3]。它根本没有被lol()更改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python